我是 swift 的新手,现在我正在学习 delegate。我认为我已经做了正确的事情,但仍然不起作用。
我正在做的是将数据从我的ViewController
传递到TestViewController
View Controller :
protocol viewControllerDelegate: class {
func viewcontrollerdelegate(setviewcontrollerdelegate: ViewController)
}
class ViewController: UIViewController ,UITextFieldDelegate {
weak var delegate: viewControllerDelegate?
@IBAction func nextViewandDelegate(sender: AnyObject) {
self.delegate?.viewcontrollerdelegate(self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showTestSegue" {
if let testViewController = segue.destinationViewController as? TestViewController {
testViewController.address = address.text!
testViewController.phone = phone.text!
}
}
}
}
TestViewController:
class TestViewController: UIViewController {
var name: String?
var address: String?
var phone: String?
var trydelegate: String?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let VC = storyboard.instantiateViewControllerWithIdentifier("viewcontroller") as! ViewController
VC.delegate = self
}
override func viewWillAppear(animated: Bool) {
addressLabel.text = address!
phoneLabel.text = phone!
trydelegateLabel.text = trydelegate //always nil here
}
}
extension TestViewController:viewControllerDelegate {
func viewcontrollerdelegate(setviewcontrollerdelegate: ViewController) {
self.trydelegate = setviewcontrollerdelegate.address.text!
}
}
我使用 segue 来传递地址和电话,效果很好。
但是我对委托(delegate)很不满意。谁能帮我一点忙吗?我知道这个问题对你来说有点简单。
非常感谢。
最佳答案
在viewDidLoad
中的TestViewController
中,您创建了新对象vc
,该对象与调用prepareForSegue
的对象不同> 所以这就是它不起作用的原因。
要解决此问题,请从 viewDidLoad
中删除代码:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("viewcontroller") as! ViewController
vc.delegate = self
并在prepareForSegue
中添加一行:
testViewController.phone = phone.text!
// New line
self.delegate = testViewController
这应该有帮助。
关于swift - 我的委托(delegate)出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35174422/