【发布时间】:2016-09-29 12:11:45
【问题描述】:
我创建了一个 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
}
}
}
我在 View Controller 上面定义了一个协议:
protocol SearchVCDelegate {
func goBack()
}
View Controller 符合协议:
class SearchVC: UIViewController,SearchVCDelegate {
var delegate:SearchVCDelegate?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.delegate = self
}
有 Button 将用户返回并调用委托方法:
@IBAction func actBack(sender: AnyObject?) {
print("actBack():\(isSearch)")
if let _ = delegate {
delegate?.goBack()
}
self.navigationController?.popViewControllerAnimated(true)
}
以及实现的Delegate方法,这里我设置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.
【问题讨论】:
-
segue 正在对 delegate() 进行完美检查。如果没问题,那么使用 NSUserDefault