通过使用委托,我试图将数据从视图控制器传递到将显示正确数量的单元格的TableView类。首先,我需要将数组传递给该类(在此处使用String进行调试)
在我的ViewController中:
protocol GroupBillVCDelegate{
func passFriendArray(string: String)
}
...
class GroupBillViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{
var delegate:GroupBillVCDelegate? // for delegate passing message
...
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if (tableView == self.FriendTableView){
let friendListCell = tableView.dequeueReusableCell(withIdentifier: "friendListCell") as! CategoryRow
// transfer friends array to CategoryRow
self.delegate?.passFriendArray(string: "Hello There")
return friendListCell
}
}
}
在TableViewCell类中:
class CategoryRow: UITableViewCell, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, GroupBillVCDelegate {
var s:String = String()
func passFriendArray(string: String) {
s = string
print(string)
}
...
// used for horizontal scrolling
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
passFriendArray(string: s) // message supposed to appear here
print ("TEST")
return 10
}
...
}
我无法设置代理。当我运行时,控制台不显示该消息。为什么没有通过?
答案 0 :(得分:0)
将代表视为桌面上可以连接到助理办公室的对讲机。
这一行:
var delegate:GroupBillVCDelegate? // for delegate passing message
定义内部通信,但不将其连接到任何内容。如果您按下对讲机上的按钮,则它不会连接任何内容。
代码self.delegate?.passFriendArray(string: "Hello There")
使用“可选链接”向委托发送消息(如果有),如果没有委托,则删除消息。
你缺少的是给代表分配一些东西:
self.delegate = someObjectThatConformsToGroupBillVCDelegateProtocol
代表是一对一的关系。
所有这一切,将表视图单元格视为视图控制器的委托是没有意义的。表视图有多个单元格。哪个单元格应该是视图控制器的委托?为什么那个细胞而不是另一个呢?