我有两个控制器
VC A
->Parent
和VC B
->Child
警报视图委托方法即
func alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int){}
在中声明VC A
。
当我显示来自VC B
委托方法的警报时,未在单击警报按钮时调用。
我有两个控制器
VC A
->Parent
和VC B
->Child
警报视图委托方法即
func alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int){}
在中声明VC A
。
当我显示来自VC B
委托方法的警报时,未在单击警报按钮时调用。
请按照以下步骤操作:
在您的 VC-B 中创建一个协议,如下所示:
protocol AlertViewProtocol:class {
func alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int)
}
在 VC-B 类中添加一个var :
var delegate: AlertViewProtocol?
在VC-B 的任何类方法中使用委托将数据发送给接收方法(即VC-A 的任何方法),即采用该协议的任何方法。按照这个模式使用委托:
delegate?.alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int)
// Above statement is like a method calling (on delegate var), use your parameters accordingly
在你的接收类中采用协议(这里是 VC-A):
class ViewControllerA: UIViewController, AlertViewProtocol {
...
...
}
在 VC-A 中实现委托方法:
func alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int) {
// Do your stuff
// when you click on the designated button in your VC-B, this method will be invoked
}
在要实例化 VC-B 对象的 VC-A 中设置委托。就我而言,这就像:
在这里,
vcb?.delegate = self
非常重要。如果您忘记使用委托self
过程设置对象的委托属性,则将无法正常工作。
@IBAction func showVCB(sender: AnyObject) {
let vcb: ViewControllerB? = self.storyboard?.instantiateViewControllerWithIdentifier("viewcontrollerB") as? ViewControllerB
vcb?.delegate = self
self.presentViewController(vcb!, animated: true, completion: nil)
}
希望这可以帮助您了解代表如何工作的过程。
您正在将AlertView
委托设置为自我,自我意味着Child
,将委托更改为 VC A。
alertView.delegate = self.parent?.parent
protocol alertViewDelegate:class {
func alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int)
}
在父类 VC A 中创建警报视图委托对象
weak var delegate:alertViewDelegate() ?= nil
在 VC B 中实现委托并在 VC B 中设置委托对象
let alertview = alertView()
alertview.delegate = self