我是斯威夫特的新手。我完全无法理解代表们。我有两个视图控制器,我需要为我想要使用委托的另一个控制器设置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.我不知道如何设置委托并调用它。请问你能帮帮我吗!提前谢谢!
答案 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)
}