簡體   English   中英

Swift3中的協議/代理不起作用

[英]Protocol/delegate in Swift3 doesn't work

我已經按照本教程的要求使用了委托方法來更新另一個類中的值,但是它甚至沒有觸發它。 你能告訴我我做錯了嗎?

protocol myDelegate {
    func report(info:String)
}

class TypeFilterViewController: UIViewController, XLFormRowDescriptorViewController,
                                UITableViewDataSource, UITableViewDelegate {

    var delegate:myDelegate?

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
         self.delegate?.report("testValue")
         self.navigationController?.popViewControllerAnimated(true) 
    }
}

因此,在選擇行項目之后,我關閉了推式視圖並顯示上一課。

class SearchRefinementsTypeCell: XLFormBaseCell, XLFormBaseCellSeparator, myDelegate {

    // Delegate method
    func report(info: String) {
        print("delegate: \(info)")
    }

    override func update() {
        super.update()
        let mc = TypeFilterViewController()
        mc.delegate = self

       self.headerLabel.text = //Value from TypeFilterViewController didSelectRow
    }

感謝您提供的所有幫助。

您顯然誤解了本教程。 當您要從單元中委派視圖控制器時,委派模式很有用。 您正在做相反的事情:將事件從viewController發送到單元格是沒有意義的,因為viewController已經可以訪問它的tableView,而tableView依次對其單元格進行操作。

另外,您不應該在單元格類中使用任何ViewController因為它會破壞MVC模式。 您應該將UITableViewCell和幾乎每個UIView視為無能為力的對象,它們無法自行決定任何事情,而只能將事件委托給其他聰明的人,這些聰明的人自己執行邏輯(視圖控制器)。

現在,關於您的案例:您擁有vc A和vc B,將其推到上方。 當按下B中的單元格時,您應該向A發送回調,對不對? 您應該做什么:

  1. B有一個實現某些協議的委托
  2. 當A按下B時,它將自身設置為協議: b.delegate = self
  3. 在B中選擇一個單元格時,您將調用委托的方法,該方法在A中實現並向其中傳遞一個字符串。
  4. A中的UI已更新。

再一次,單元必須對您的任何視圖控制器一無所知,它們只是典當。 所有邏輯都應在視圖控制器之間進行處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM