我已经创建了一个Self Segue从按钮到视图控制器本身,即当按钮被点击时视图将自动进入。Self Segue和委托怪异行为
我在视图控制器声明的Bool
变量isSearch
:
var isSearch! false
现在,当按钮被点击prepareForSegue
输出isSearch
值即false
,这是正确的:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "SearchSelfSegue" {
if let destVC = segue.destinationViewController as? SearchVC {
print("SearchSelfSegue:\(isSearch)")// output: false
}
}
}
我有上面定义的协议视图控制器:
protocol SearchVCDelegate {
func goBack()
}
视图控制器符合协议:
class SearchVC: UIViewController,SearchVCDelegate {
var delegate:SearchVCDelegate?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.delegate = self
}
有按钮,将采取用户返回,并委托方法将被调用:
@IBAction func actBack(sender: AnyObject?) {
print("actBack():\(isSearch)")
if let _ = delegate {
delegate?.goBack()
}
self.navigationController?.popViewControllerAnimated(true)
}
而实现的委托方法,在这里我设置isSearch
到true
,并且输出是true
,其是正确的:
func goBack() {
isSearch = true
print("goBack():\(isSearch)")
}
现在,当我再次点击回来。输出显示为false
,但我已将其设置为true
。
整体输出是这样的:
SearchSelfSegue:false //I went to next view
actBack():false //clicked back button
goBack():true //delegate method executed
actBack():false //clicked back again, this should be true.
赛格瑞正在完善检查委托()。如果它是好的,那么使用NSUserDefault – JAck