如何从子 UICollectionview 中获取 UITableView 的一部分
How to get section of UITableView from inside a child UICollectionview
我有一个 UITableView
,每一行都有一个 UICollectionView
,如下图所示。
来源:https://ashfurrow.com/blog/putting-a-uicollectionview-in-a-uitableviewcell-in-swift/
我的应用程序的目的是在每个 table 视图行中显示一种语言的字符集。每个字符都包含在相应行内集合视图的集合视图单元格中。
我遇到的问题是每个 table 视图行都显示英文字符集。
这是因为每个集合视图只有一个部分,因此每个集合视图都使用相同的 indexPath.section
零值。
我需要做的是获取集合视图所在的 table 视图单元格的部分值,并以某种方式将其传递给
func collectionView(_ collectionView: UICollectionView,
cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
我尝试了几种方法,但找不到从其中的集合视图访问 table视图部分值的方法。
我的代码有点乱,但通常重要的部分是
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "HorizontalSlideCell", for: indexPath)
return cell
}
...
func collectionView(_ collectionView: UICollectionView,
cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "InnerCollectionViewCell",
for: indexPath as IndexPath)
//format inner collectionview cells
//indexPath.section is the collectionview section index but needs to be its parent tableview section's index. How do I get it?
cellCharLabel?.text = Languages.sharedInstance.alphabets[indexPath.section].set[indexPath.row].char
cellCharLabel?.textAlignment = .center
cellCharLabel?.font = UIFont(name: "Helvetica", size: 40)
cell.contentView.addSubview(cellCharLabel!)
return cell
}
我假设您有一个带有 UICollectionView 实例的自定义 UITableViewCell class,因此您只需要在调用 cellForRowAtIndexPath 时将部分索引传递给它即可。
您需要在 tableViewCell class 中创建一个 var 来保存部分索引。
class CustomTableViewCell: UITableViewCell {
var sectionIndex:Int?
}
然后在调用 cellForRow 时...您只需将部分传递给该单元格。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "HorizontalSlideCell", for: indexPath) as CustomTableViewCell
cell.sectionIndex = indexPath.section
return cell
}
不确定您是如何将数据加载到集合视图中的,因为您没有显示它,但是一旦您的 table 视图单元格包含该部分,您就可以执行许多操作来加载数据。
如果您需要更多详细信息,请告诉我
可以设置collectionView
标签来制作。
CollectionView
应该是 tableViewCell
的子视图。那就是 collectionView
可以是你自定义的 属性 TableViewCell
好像你用的是 Prototype Cell
.
class YourCustomizeTableViewCell: UITableViewCell {
let collectionView: CollectionView
...
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "HorizontalSlideCell", for: indexPath) as! YourCustomizeTableViewCell
cell.collectionView.tag = indexPath.row
return cell
}
...
func collectionView(_ collectionView: UICollectionView,
cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "InnerCollectionViewCell",
for: indexPath as IndexPath)
//indexPath.section is the collectionview section index but needs to be its parent tableview section's index. How do I get it?
cellCharLabel?.text = Languages.sharedInstance.alphabets[collectionView.tag].set[indexPath.row].char
...
return cell
}
我有一个 UITableView
,每一行都有一个 UICollectionView
,如下图所示。
来源:https://ashfurrow.com/blog/putting-a-uicollectionview-in-a-uitableviewcell-in-swift/
我的应用程序的目的是在每个 table 视图行中显示一种语言的字符集。每个字符都包含在相应行内集合视图的集合视图单元格中。
我遇到的问题是每个 table 视图行都显示英文字符集。
这是因为每个集合视图只有一个部分,因此每个集合视图都使用相同的 indexPath.section
零值。
我需要做的是获取集合视图所在的 table 视图单元格的部分值,并以某种方式将其传递给
func collectionView(_ collectionView: UICollectionView,
cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
我尝试了几种方法,但找不到从其中的集合视图访问 table视图部分值的方法。
我的代码有点乱,但通常重要的部分是
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "HorizontalSlideCell", for: indexPath)
return cell
}
...
func collectionView(_ collectionView: UICollectionView,
cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "InnerCollectionViewCell",
for: indexPath as IndexPath)
//format inner collectionview cells
//indexPath.section is the collectionview section index but needs to be its parent tableview section's index. How do I get it?
cellCharLabel?.text = Languages.sharedInstance.alphabets[indexPath.section].set[indexPath.row].char
cellCharLabel?.textAlignment = .center
cellCharLabel?.font = UIFont(name: "Helvetica", size: 40)
cell.contentView.addSubview(cellCharLabel!)
return cell
}
我假设您有一个带有 UICollectionView 实例的自定义 UITableViewCell class,因此您只需要在调用 cellForRowAtIndexPath 时将部分索引传递给它即可。
您需要在 tableViewCell class 中创建一个 var 来保存部分索引。
class CustomTableViewCell: UITableViewCell {
var sectionIndex:Int?
}
然后在调用 cellForRow 时...您只需将部分传递给该单元格。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "HorizontalSlideCell", for: indexPath) as CustomTableViewCell
cell.sectionIndex = indexPath.section
return cell
}
不确定您是如何将数据加载到集合视图中的,因为您没有显示它,但是一旦您的 table 视图单元格包含该部分,您就可以执行许多操作来加载数据。
如果您需要更多详细信息,请告诉我
可以设置collectionView
标签来制作。
CollectionView
应该是 tableViewCell
的子视图。那就是 collectionView
可以是你自定义的 属性 TableViewCell
好像你用的是 Prototype Cell
.
class YourCustomizeTableViewCell: UITableViewCell {
let collectionView: CollectionView
...
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "HorizontalSlideCell", for: indexPath) as! YourCustomizeTableViewCell
cell.collectionView.tag = indexPath.row
return cell
}
...
func collectionView(_ collectionView: UICollectionView,
cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "InnerCollectionViewCell",
for: indexPath as IndexPath)
//indexPath.section is the collectionview section index but needs to be its parent tableview section's index. How do I get it?
cellCharLabel?.text = Languages.sharedInstance.alphabets[collectionView.tag].set[indexPath.row].char
...
return cell
}