0

我有一个TableView带有两种单元格的单元格,都充满了一个CollectionView. 在TableViewController我让他们用一个简单的 if 语句显示。

我的TableViewController

import UIKit
import RealmSwift
import Alamofire
import SwiftyJSON

let myGroupLive = DispatchGroup()
let myGroupCommunity = DispatchGroup() 

class HomeVTwoTableViewController: UITableViewController {

var headers = ["Live", "Channel1", "ChannelTwo", "Channel3", "Channel4", "Channel5", "Channel6"]

override func viewDidLoad() {
    super.viewDidLoad()
    DataController().fetchSomeDate(mode: "get")
    DataController().fetchSomeOtherData(mode: "get")
}
//MARK: Custom Tableview Headers
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return headers[section]
}

override func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int){

    view.tintColor = UIColor.black
    let header = view as! UITableViewHeaderFooterView
    if section == 0 {
        header.textLabel?.textColor = UIColor.black
        view.tintColor = UIColor.white
    }
    else {
        view.tintColor = UIColor.groupTableViewBackground
    }
}

//MARK: DataSource Methods
override func numberOfSections(in tableView: UITableView) -> Int {
    return headers.count
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1
}

//Choosing the responsible PrototypCell for the Sections
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if indexPath.section == 0 {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cellBig", for: indexPath) as! HomeVTwoTableViewCell

        return cell
    }
    else if indexPath.section == 1 {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cellSmall", for: indexPath) as! HomeVTwoTableViewCellSmall

        return cell
    }

    else {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cellSmall", for: indexPath) as! HomeVTwoTableViewCellSmall

        return cell
    }
}

//Set custom cell height, has to match the CollectionView height
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

    if indexPath.section == 0 {
        return 225.0
    }
    else {
        return 120.0
    }
  }
}

我的TableViewCellSmall

import UIKit
import RealmSwift

var communities: Results<Community>?

class HomeVTwoTableViewCellSmall: UITableViewCell{

@IBOutlet weak var collectionView: UICollectionView!
}

extension HomeVTwoTableViewCellSmall: UICollectionViewDataSource,UICollectionViewDelegate {

//MARK: Datasource Methods
func numberOfSections(in collectionView: UICollectionView) -> Int
{
    return 1
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
{
    return (communities?.count)!
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
{
    guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionCellSmall", for: indexPath) as? HomeVTwoCollectionViewCellSmall else
    {
        fatalError("Cell has wrong type")
    }

//Here I want my Sorting Statement to make unique content per collection view
    //normal approach if no section is asked
    let url : String = (communities?[indexPath.row].pictureUri)!
    let name :String = (communities?[indexPath.row].communityName)!
    cell.titleLbl.text = name
    cell.imageView.downloadedFrom(link :"somelink")

    return cell
}


//MARK: Delegate Methods  
override func layoutSubviews() {
    myGroupCommunity.notify(queue: DispatchQueue.main, execute: {
        let realm = try! Realm()
        communities = realm.objects(Community.self)
        self.collectionView.dataSource = self
        self.collectionView.delegate   = self
    })

}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
do something
 }
}

我现在的问题是,我希望“通道单元”在CollectionView. 这意味着我需要某种密钥才能在正确的单元格中获取正确的数据。我的方法是使用 SectionHeader Title,但由于某些原因,我无法从TableViewCellSmall. 所以我拥有所有单元格中的所有数据,没有我的密钥就无法对它们进行排序。

提前致谢。

4

1 回答 1

0

据我了解,您需要用不同的内容填充每个单元格的集合视图,为此需要识别单元格?

如果是这样,我使用了下面对我有帮助的方法,你可以试试。

如果有疑问,请告诉我,以便我可以提供帮助,我希望我有所帮助:)

//TableViewCell Add

var didCollectionViewCellSelect: ((Int) -> Void)?

override func setSelected(_ selected: Bool, animated: Bool)
    {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }


//TabelView Add
class myClass: UITableViewController
{
    var storedOffsets = [Int: CGFloat]()

    override func viewDidLoad()
    {
        super.viewDidLoad()

    }

  override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)
  {
        guard let tableViewCell = cell as? myTableViewCell else { return }

        let secao = indexPath.section*1000 //Section
        let linha = indexPath.row //Row
        let posicao = secao+linha

        tableViewCell.setCollectionViewDataSourceDelegate(self, forRow: posicao)
        tableViewCell.collectionViewOffset = storedOffsets[posicao] ?? 0
  }

  override func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath)
  {
    guard let tableViewCell = cell as? myTableViewCell else { return }

    let secao = indexPath.section*1000 //Section
    let linha = indexPath.row //Row
    let posicao = secao+linha 

    storedOffsets[posicao] = tableViewCell.collectionViewOffset

  }

}       

//CollectionView        

  func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
  {
    let posicao = collectionView.tag
    let secao = Int(collectionView.tag/1000) //Section
    let linha = posicao-(secao*1000) //Row

    var qtd = 0

    if secao == 0 && arrStation.count > 0
    {
        qtd = arrStation.count
    }

    return qtd
  }
于 2017-06-23T03:38:06.750 回答