我已經創建了一個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