2017-06-16 93 views
0

我有一個TableView兩種單元格,都填充了CollectionView。在TableViewController我讓他們顯示一個簡單的if語句。從TableViewCell獲取TableView部分標題,swift

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標題,但由於某些原因,我不能從TableViewCellSmall訪問它。因此,我擁有所有單元中的所有數據,並且無法在沒有我的密鑰的情況下將它們排序。

在此先感謝。

回答

0

從我的理解你需要填充不同內容的每個單元格的collectionview,併爲此需要識別單元格?

如果是這樣,我用下面的方法幫助了我,你可以試試。

如有疑問,讓我知道,所以我可以幫忙,我希望我幫助:)

//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 
    } 
+0

感謝響應。這有所幫助,但我認爲我的問題寫得很糟糕。問題是我需要TableCells的部分頭文件來填充CollectionView中的數據(作爲標識符)。我用一個全局變量解決了它。但我認爲這是一個非常糟糕的做法。我不確定你的代碼是否能解決這個問題。 – Lukas

相關問題