[英]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.