2014年11月6日 星期四

使用UIAlertController實作AlertView及ActionSheet

iOS App學習筆記



Windows中常常會需要使用彈跳視窗提示使用者某些事情,iOS上提供了兩種形式的表單來達到這樣的效果,一種是AlertView(圖一),另一種是ActionSheet(圖二),前者會彈跳至畫面中央,後者則是由下自上滑出,表單底部貼齊畫面下方。

圖一

圖二

iOS 8之前,開發者必須使用UIAlertView UIActionSheet 分別實作,以UIAlertView 為例,首先要創造它的實體—

上面這段程式碼設定UIAlertView 標題及內容;將Delegate指向產生它的Controller;預設會有一個Cancel按鈕,倘若不需要的話可以將它設為nil,這裡是將它的標題設為OK;設置其他按鈕的標題,會自動產生出和標題數量一樣的按鈕。


接著我們必須讓Controller實作UIAlertViewDelegate 這個Protocol


覆寫alertView:clickedButtonAtIndex: 這個Delegate方法,每次使用者按下其中一個按鈕時系統就會呼叫此方法,透過傳入的buttonIndex 參數來判斷使用者按下的是哪一個按鈕,並且執行對應的程式碼。


最後讓表單出現在螢幕中。
ActionSheet也是使用近乎一樣的方式運作(只需要把上述所有程式碼中AlertView的部分換成ActionSheet即可)。在iOS 8後,Apple終於把兩者合而為一,統一由UIAlertController 來管理,接下來就讓我們看看該如何使用這個全新的Controller吧!同樣地、首先我們得創建一個實體—

其中preferredStyle 必須傳入UIAlertControllerStyle,這個Enumerate包含兩種值:UIAlertControllerStyleActionSheet UIAlertControllerStyleAlert,分別對應上述提到的兩種表單,這個範例中產生的是後者。


大家應該能夠注意到在創建實體時並沒有定義任何按鈕,我們必須透過新的類別UIAlertAction 來定義,初始化過程中style傳入的是UIAlertActionStyle,這個Enumerate包含三種值:UIAlertActionStyleDefaultUIAlertActionStyleCancel UIAlertActionStyleDestructive,這三種按鈕的樣貌可以參照圖三;handler 則傳入一個Block,裏頭定義了使用者按下這個按鈕所對應的行為。
圖三


將這些按鈕加入UIAlertController 中。


最後透過Modal的方式將表單彈出,iOS提供了幾種View的顯示方式,Modal是其中一種,而其對應的方法就是presentViewController

看完上述的介紹,相信你已經學會了iOS的提示表單了,是不是非常簡單呢?

沒有留言:

張貼留言