斯威夫特:不知道如何打电话给我的代表

时间:2015-04-10 17:13:11

标签: ios swift uiviewcontroller delegates

我是斯威夫特的新手。我完全无法理解代表们。我有两个视图控制器,我需要为我想要使用委托的另一个控制器设置var。我在这里搜索了很多话题,但没有任何帮助。我的视图控制器B有一个var myFlag我想从视图控制器A设置。这里是视图控制器B代码

protocol flagDelegate {       
    func anyFlag(flag: Bool!)
}

class myBViewController: UIViewController {    
    var myFlag: Bool = false

    override func viewDidLoad() {
        super.viewDidLoad()
        println("myFlag: \(self.myFlag)")   
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        println("myFlag: \(self.myFlag)")   
    }

    func anyFlag(flag: Bool!) {
        self.myFlag = flag
    }
} 

视图控制器A有一个按钮,用代码加载视图控制器B:

@IBAction func addButton(sender: UIBarButtonItem) {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewControllerWithIdentifier("myNC") as! UIViewController
        self.presentViewController(vc, animated: true, completion: nil)
    }

myNC是一个导航控制器,它包含View Controller B.我不知道如何设置委托并调用它。请问你能帮帮我吗!提前谢谢!

1 个答案:

答案 0 :(得分:0)

如果视图控制器A正在视图控制器上设置一个属性,它将要显示(查看控制器B),则不需要使用委托模式。委托模式用于向后通信(从B到A)。

因此,您可以在呈现视图控制器之前设置属性,如下所示:

@IBAction func addButton(sender: UIBarButtonItem) {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let navigationVC = storyboard.instantiateViewControllerWithIdentifier("myNC") as! UINavigationController

    // get a reference to your VC
    let rootViewController = navigationVC.viewControllers[0] as MyBViewController

    // set the property
    rootViewController.myFlag = true // or false

    // or you could call the method you wrote
    rootViewController.anyFlag(true)

    // present the view controller
    self.presentViewController(navigationVC, animated: true, completion: nil)
}
相关问题