-2

我有两个控制器

VC A->ParentVC B->Child

警报视图委托方法即

func alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int){}

在中声明VC A

当我显示来自VC B委托方法的警报时,未在单击警报按钮时调用。

4

3 回答 3

0

请按照以下步骤操作:

  1. 在您的 VC-B 中创建一个协议,如下所示:

    protocol AlertViewProtocol:class {
        func alertView(View: UIAlertView!, clickedButtonAtIndex buttonIndex: Int)
    }
    
  2. 在 VC-B 类中添加一个var :

    var delegate: AlertViewProtocol?
    
  3. 在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
    
  4. 在你的接收类中采用协议(这里是 VC-A):

    class ViewControllerA: UIViewController, AlertViewProtocol {
    ...
    ...
    }
    
  5. 在 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
    }
    
  6. 在要实例化 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)
    }

希望这可以帮助您了解代表如何工作的过程。

于 2017-01-17T04:49:02.737 回答
0

您正在将AlertView委托设置为自我,自我意味着Child,将委托更改为 VC A。

alertView.delegate = self.parent?.parent
于 2017-01-16T09:36:54.127 回答
0
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
于 2017-01-16T07:16:07.023 回答