今天Bear要來介紹一個結和了UIAlertView 跟 UIActionSheet 功能的物件: UIAlertController !
那他還有什麼新的功能嗎? 沒有!完全沒有
是的!你沒看錯,UIAlertController 純粹就是將UIAlertView 與 UIActionSheet 兩者合而為一
But ! 如果您持續使用 UIAlertView 與 UIActionSheet 可能沒事(目前這兩者都已經被編為Depreciate的狀態了)
運氣不好你可能會發現你的App不斷閃退或是毫無作用了,
為了避免這狀況,我們還是花點心思跟隨蘋果的腳步吧!
其中就有注意到這款App的畫面變成如下
印象中之前應該是有一些選單項目可以選擇, 但是推論是iOS 8的影響造成的其中一項結果, 沒法正常顯示出來
Bear試著用Swift 與Obj-C的方法來介紹這個Apple在iOS 8所推出的新Class, 其實蠻簡單好用的噢!
整個的概念很簡單,
首先需要建立一個 UIAlertController,這個物件可以設定標題,訊息跟類型
標題(Title)與訊息(Message)顧名思義就是這個視窗所顯示的訊息內容與想要呈現的項目主題
只要給定你想呈現的字串(NSString)就好,
而類型(preferredStyle)則分為 Alert 跟 ActionSheet 兩種,Alert 漂浮在畫面中心,ActionSheet 則從底下浮起
Tako: 這跟以前有什麼不一樣嗎?
Bear: 沒有
Tako: .... (崩潰)
跟以前比較不一樣的是, 以前是在UlAlertView或是ActionSheet初始化以前,
給定一組陣列讓我們知道每一個按鈕要顯示哪些字串,
現在的UIAlertController則是你要先決定每一個動作要做哪些事項,
透過添加一個UIAlertAction到UIAlertController的動作來完成,
其實就跟平常用的取消(Cancel), 確認(OK)這些按鈕的動作沒差多少,
UIAlertAction在產生的時候, 需要指派以下參數
- 標題(Title): 決定你按鈕的名字
- 樣式(Style): 這邊有3個樣式可以選擇,
* UIAlertActionStyleCancel - 取消基本用這個,在ActionSheet 或Alert 按鈕大於三個時會出現在最下方
* UIAlertActionStyleDestructive - 讓按鈕變紅色,常用在刪除
- 按鈕事件處理(Handler): UIAlertAction 也會附帶一個 Block,點擊後要觸發什麼事件直接寫在裡面就可以了!
這邊有個比較特別的是,當ActionSheet 有加入 Cancel Action 時,
可以直接點擊 ActionSheet 之外畫面,
直接觸發 Cancel Action,Alert 則無此功能
講完設定後, 就是要讓AlertController出現在畫面的方式啦!
直接用以下function呼叫就行了, Self是指UIViewController, 畫面元件,
注意不要寫成self.navigationController
希望讓大家更容易理解啦!
Objective-C
首先我們先建立一個按鈕來當觸發點,不懂的朋友可以參考前面的文章: iOS入門教學 - 如何建立按鈕
直接參考下圖部分就行了
流程完全一樣,如果語法有疑惑的朋友可以參考前面的文章: iOS 8 - 如何製作按鈕事件與標籤?
這邊Bear提一下在Swift中block(GCD)的用法
以 UIAlertAction 的 handler: 後block為例
回傳值則為 void (不需回傳) 我們這邊直接省略不寫
in 之後就是block 要做的事情了!
Objective - C版本: https://github.com/TakoBear/ObjectiveC---UIAlertControllerDemo
Swift版本: https://github.com/TakoBear/Swift---UIAlertControllerDemo