我有一个UITableview
,它具有唯一的单元格,
每个单元格都有自己的类,并且它们具有我想连接到主UITableviewcontroller
我附加一个协议并在tableviewcontroller中打开它 但没有被读取
我怎么初始化它或我做错了什么?
这是我的手机课堂:
import UIKit
class AddFaxHeadlineTableViewCell: UITableViewCell {
var delegate: AddFaxHeadlineProtocol?
@IBOutlet weak var addButton: UIButton!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
@IBAction func onAddFaxNumberPressed(_ sender: Any) {
delegate?.faxButtonPressed()
}
}
protocol AddFaxHeadlineProtocol{
func faxButtonPressed()
}
并且在我的tableviewcontroller中,我扩展了协议:
class SummaryMainTableViewController: UITableViewController, AddFaxHeadlineProtocol, AddEmailHeadlineProtocol {
但是函数本身永远不会被读取:
func faxButtonPressed() {
var indexToInsert = 0
for forIndex in 0..<sectionsData.count {
// render the tick mark each minute (60 times)
if (sectionsData[forIndex] == "addFaxHeadline") {
indexToInsert = forIndex + 1
}
}
sectionsData.insert("addNewFax", at: indexToInsert)
mainTableView.reloadData()
}
答案 0 :(得分:5)
您需要致电:
cell.delegate = self
在您的cellForRowAtIndex
方法中
这是协议中常见的错误,委托人忘记调用委托。
以下是几个可以检查是否缺少正在调用委托的示例:-
Swift delegate beetween two VC without segue
Delegate seems to not be working, according to the console
How to present another view controller after dismiss from navigation controller in swift?
答案 1 :(得分:1)
无需协议即可进入vc的另一种方法
let cell = ///
cell.addButton.tag = indexPath.row
cell.addButton.addTarget(self, action: #selector(buttonTapped(_:)), for: .touchUpInside)
}
@objc func buttonTapped(_ sender:UIButton) {
print(sender.tag)
}
答案 2 :(得分:1)
检查您是否正在执行此操作:
cell.delegate = self (It's required)
然后像下面那样改善您的代码行。由于您不会设置委托,因此直接调用此委托方法将导致崩溃。
@IBAction func onAddFaxNumberPressed(_ sender: Any) {
if let delegateObject = delegate {
delegateObject.faxButtonPressed()
}
}
第二, 在这一行中,delegateObject.faxButtonPressed(),您将需要发送一些参数以标识将单击单元格。因此,您可以在此处传递按钮标记,也可以传递单元格。