【问题标题】:Protocol doesn't get read in swift xcode project在 swift xcode 项目中未读取协议
【发布时间】:2018-11-29 12:57:09
【问题描述】:

我有一个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()
    }

【问题讨论】:

标签: swift xcode uitableview


【解决方案1】:

您需要致电:

cell.delegate = self

在您的 cellForRowAtIndex 方法中

这是协议和委托中的常见错误,忘记调用 delegate

这里有几个例子,你可以检查所有缺少的是调用委托:-

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?

【讨论】:

    【解决方案2】:

    另一种无需协议即可进入 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)
    
    }
    

    【讨论】:

      【解决方案3】:

      检查您是否正在这样做:

      cell.delegate = self (It's required)
      

      然后像下面这样改进您的代码行。因为你不会设置委托,所以直接调用这个委托方法会崩溃。

      @IBAction func onAddFaxNumberPressed(_ sender: Any) {
          if let delegateObject = delegate {
              delegateObject.faxButtonPressed()
          }
      }
      

      第二, 在这一行中,delegateObject.faxButtonPressed(),您需要发送一些参数来识别将单击的单元格。所以你可以在这里传递按钮标签,也可以传递单元格。

      【讨论】:

        猜你喜欢
        • 2014-10-15
        • 1970-01-01
        • 1970-01-01
        • 2015-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多