iOS Storyboard unwind segues使用小结
使用storyboard開發的時候,經常會在一個scene上添加一個button,再拖拽這個button到某個想要關聯的頁面,最后選擇push的方式跳轉。這樣scene_A和scene_B就有了一個“順序”的跳轉方式了。但有時,希望可以從scene_B觸發某個action,跳轉回scene_A。如果還采用剛才的方式,就會有問題。因為,跳回的那個scene_a已經不是原來的那個scene_A了。這就需要使用到storyboard的unwind segue了。寫個demo小總結一下:
創建如下圖所示的storyboard。 RedViewController push到 YellowViewController, YellowViewController push到BlueViewController, BlueViewController modal到?GreenViewController。從YellowViewController可以返回RedViewController,從BlueViewController可以返回YellowViewController和RedViewController。當然,從GreenViewController也是可以返回到BlueViewController的。
回到代碼部分。因為使用了storyboard,push、model的跳轉都省去了寫代碼,同理,“返回”的跳轉也是省去了代碼的。
RedViewController.m中
?
- (IBAction)unwindSegueToRedViewController:(UIStoryboardSegue *)segue {
?? ?
}
需要注意的是這個方法的返回值必須是ibaction,參數必須是uistoryboardsegue。至于為什么,后面的代碼會有體現。
回到storyboard文件,觀察到RedViewController的scene下方有個綠色的按鈕(不是因為寫了上面的代碼才出現綠色按鈕,而是一直都存在的)。
接下來,右鍵exit按鈕(綠色按鈕),就會出現剛才寫的方法unwindseguetoredviewcontroller:
選中這個方法,拖拽至YellowViewController的back redvc按鈕。
放手之后,會在back redvc附近出現一個action的提示,選中。這樣,當點擊yellowviewcontroller的back red vc按鈕之后,就會跳回red?view controller。編譯一下,取保沒有問題。運行程序。
需要的說明:
1.如果你像從yellowviewcontroller返回到redviewcontroller,那么unwind segue關聯的方法必須要再redviewcontroller中寫明,即此例子中的-(inaction)unwindtoredviewcontroller:(uistoryboardsegue *)segue;注意參數和返回指,方法名任意。
2.是右鍵redviewcontroller的exit按鈕(綠色按鈕)出現unwind segue可以關聯的方法,然后去關聯yellowviewcontroller的button。
同理,可以做BlueViewController返回到YellowViewController的實現。
在YellowViewoController.m中
?
- (IBAction)unwindToYellowViewController:(UIStoryboardSegue *)segue {
?? ?
}
右鍵yellowviewcontroller的exit按鈕,關聯blueviewcontroler的back yellowvc 按鈕。
還需要實現從blueviewcontroller直接返回到redviewcontroller中,選中redviewcontroller的exit按鈕,選擇unwindtoredviewcontroller關聯blueviewcontroller上的按鈕。
編譯一下,沒有任何問題,運行程序,感受一下。
從YellowViewController和BlueViewController都可以返回到RedViewController,此時需要做一個判斷,看看到底是從哪里返回的。
?
這也是為什么方法的參數是segue的原因,通過segue可以拿到source?view controller(源視圖控制器)。
?
嘗試push之后,modal也是同樣的道理,用modal模式從blueviewcontroller展示greenviewcontroller。
要想返回,需要在blueviewcontroller中寫關聯unwind segue的方法:
?
- (IBAction)unwindToBlueViewController:(UIStoryboardSegue *)segue {
?? ?
}
關聯unwindtoblueviewcontroller方法到相應的button上。
至此,使用storyboard“返回”就告一段落了,大多數時間,花銷在拖拽控件上,根本沒有寫相關pop dismiss方法。這也是storyboard的一大優勢。
是不是也可以用代碼實現呢?可以的。
在storyboard中選中GreenViewController scene,在左側可以看到unwind segue的表示,有點像DNA序列是的,選中之后,定義它的唯一表示為greenUnwind
在greenviewcontroller.m中
back code按鈕關聯的方法:
?
編譯一下,沒有任何錯誤,運程程序。
轉載于:https://www.cnblogs.com/melons/p/5792019.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的iOS Storyboard unwind segues使用小结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: a, b = b, a+b
- 下一篇: 在mac上搭建octopress+git