gpt4 book ai didi

ios - 快速从 TableViewCell 获取 TableView 部分标题

转载 作者:行者123 更新时间:2023-11-30 12:22:52 27 4
gpt4 key购买 nike

我有一个带有两种单元格的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
}
}

我现在的问题是,我希望“Channel Cells”在CollectionView 中填充自定义的不同数据。这意味着我需要某种 key 才能在正确的单元格中获取正确的数据。我的方法是获取SectionHeader Title,但由于某些原因我无法从TableViewCellSmall访问它。所以我拥有所有单元格中的所有数据,如果没有我的 key 就无法对它们进行排序。

提前致谢。

最佳答案

据我了解,您需要用不同的内容填充每个单元格的 Collection View ,并且为此需要识别单元格?

如果是的话,我使用下面的方法对我有帮助,你可以尝试一下。

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

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

关于ios - 快速从 TableViewCell 获取 TableView 部分标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44583256/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com