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