簡體   English   中英

Swift 3.0委托協議不起作用

[英]Swift 3.0 Delegate Protocol doesn't work

我已經在兩個視圖控制器中創建了委托協議。 但委托方法不會調用我的代碼段。 這是什么原因。 我找不到問題,請發表您的建議以重溫此問題。

主視圖控制器

class ViewController: UIViewController, testDelegateMethod {

override func viewDidLoad() {
    super.viewDidLoad()

    let vw = testViewController()
    vw.delegateTest = self

    let push = self.storyboard?.instantiateViewController(withIdentifier: "testViewController")
    self.navigationController?.pushViewController(push!, animated: true)
}

func testMethod(value:String) {
    print("Hai", value)
}
}

子視圖控制器

protocol testDelegateMethod {
func testMethod(value:String)
}

class testViewController: UIViewController {
var delegateTest : testDelegateMethod?

override func viewDidLoad() {
    super.viewDidLoad()
}

@IBAction func actSubmit(_ sender: Any) {
    delegateTest?.testMethod(value: "Hello how are you!")
}

}

由於此行,您面臨的問題

let vw = testViewController()
    vw.delegateTest = self

您已經創建了testViewController vw的實例,並已分配了vw實例的委托

在下一行

let push = self.storyboard?.instantiateViewController(withIdentifier: "testViewController")
self.navigationController?.pushViewController(push!, animated: true)

您正在創建不同的testviewcontroller push實例

不需要此代碼,

let vw = testViewController()
        vw.delegateTest = self

相反做

let push testViewController = self.storyboard.instantiateViewController(withIdentifier: "testViewController") as! testViewController
push.delegateTest = self
self.navigationController?.pushViewController(push, animated: true)

viewdidLoad()方法中更新這些更改

override func viewDidLoad() {
    super.viewDidLoad()

   if let push = self.storyboard?.instantiateViewController(withIdentifier: "testViewController") as? SelectionScreen
  {
    push.delegateTest = self
  }

}
let vw = testViewController() // Your are doing wrong code 
vw.delegateTest = self   

僅使用此

我希望它對你有用

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let push = storyboard.instantiateViewController(withIdentifier:"testViewController")as! testViewController
push.delegateTest = self
self.navigationController?.pushViewController(push, animated: true)

此代碼段沒有意義。 您只是創建一個對象,而不再使用它。 因此,請刪除此代碼段。

  let vw = testViewController()
        vw.delegateTest = self

並這樣做:

override func viewDidLoad() {
    super.viewDidLoad()
    let pushVC = self.storyboard?.instantiateViewController(withIdentifier: "testViewController") as! testViewController
 pushVC.delegateTest = self

    self.navigationController?.pushViewController(pushVC, animated: true)
}

我認為,您將代碼func testMethod(value:String) { print("Hai", value) }放入viewDidLoad中,然后let push = self.storyboard?.instantiateViewController(withIdentifier: "testViewController") self.navigationController?.pushViewController(push!, animated: true)

暫無
暫無

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

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