我正在使用带有多种单元格类型的tableView
来创建表单。这些类型之一包含一个UICollectionView,该UICollectionView带有用于选择一些答案的按钮。
关于答案,我需要的是能够隐藏或显示表中的行。 例如:当问题2的答案为“否”时,问题3不再显示。
但是我不知道如何使该tableview知道在其中一个单元格中正在选择什么
在包含UICollectionView的单元格中,我有此方法
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let indexPath = optionsCollectionView.indexPathsForSelectedItems?.first
let cell = collectionView.cellForItem(at: indexPath!) as! OptionsCollectionViewCell
let data = cell.itemButton.titleLabel?.text
selectedItem = data
}
但是我不知道如何自动将其传递给tableview,因此它知道要显示或隐藏哪些行...知道吗?
这是我的cellForRowAt
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if sortedFixedContentType.count != 0 {
let item = sortedFixedContentType[indexPath.row]
switch item.typeId {
case "42":
let cell = tableView.dequeueReusableCell(withIdentifier: "FormFileCell", for: indexPath) as! FormFileCell
return cell;
case "39":
let cell = tableView.dequeueReusableCell(withIdentifier: "FormExpenseTypeCell", for: indexPath) as! FormExpenseTypeCell
return cell;
case "86":
let cell = tableView.dequeueReusableCell(withIdentifier: "FormExpensePaymentModeCell", for: indexPath) as! FormExpensePaymentModeCell
return cell;
case "87":
let cell = tableView.dequeueReusableCell(withIdentifier: "FormExpenseFileTypeCell", for: indexPath) as! FormExpenseFileTypeCell
return cell;
case "88":
let cell = tableView.dequeueReusableCell(withIdentifier: "FormProviderCell", for: indexPath) as! FormProviderCell
return cell;
default:
let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier, for: indexPath) as! BaseFormCell
cell.idLabel.text = item.htmlType
return cell
}
}
else {
let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier, for: indexPath) as! BaseFormCell
cell.idLabel.text = ""
return cell
}
}
谢谢
答案 0 :(得分:3)
执行此操作有四个步骤:-
1。首先创建一个协议,在您正在使用collectionview的自定义单元格中说“ CustomCellDelegate”,然后创建一个变量来保存该自定义委托,仅举一个例子,假设您的单元格名称为CustomCell,请创建一个CustomCellDelegate并声明作为customDelegate
protocol CustomCellDelegate : class {
func Method1()
}
class CustomCell : UITableViewCell {
var customDelegate : CustomCellDelegate?
}
2。然后,您需要像这样从CustomCell类collectionview委托方法didSelectItemAt触发该委托
extension CustomCell : UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if let delegate = customDelegate {
delegate.Method1()
}
}
}
3。第三次将customDelegate分配给您要在其中获取委托的视图控制器,例如,此处的myViewController
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "customeCellIdentifier", for: indexPath) as! CustomCell
cell.customDelegate = self // myViewController
return cell
}
4。像这样在您的视图控制器中处理委托
extension myViewController : CustomCellDelegate {
func Method1() {
print("Method 1 called")
}
}
我希望这可以解决您的问题,如果您认为此答案有帮助,请告诉我。 干杯!