UIAlUIAlertController詳解與簡單使用

蘋果在 iOS 8.0之後,蘋果棄用了UIAlertView 和 UIActionSheet,我們在蘋果有關UIAlertView的官方文檔中可以看到有關的描述與說明,如圖1



圖1

注:UIAlertView在iOS 8中已被棄用。(請注意,UIAlertViewDelegate也已被棄用。)要在iOS 8及更高版本中創建和管理警報,請改用UIAlertController與優先級的UIAlertControllerStyleAlertStyle

官方文檔中明確說明UIAlertView在iOS 8中已被棄用,(注意:文檔中說有關UIAlertView的相關代理的方法也棄用的,UIActionSheet同樣)建議我們改用UIAlertController與優先級的UIAlertControllerStyleAlertStyle

雖說被棄用的,但是我們還是可以繼續使用的,會報警告,但是蘋果不過對其進行更新和維護了。選擇上,看個人習慣,但是我覺得既然蘋果棄用了UIAlertView UIActionSheet,還是應該有原因的,原因我們肯定不知道,但是既然棄用了,以後可能會不允許繼續使用的,那麼我們不如就趁早用起來蘋果官方推薦的UIAlertController。接下來我們看下代碼實例(PS:大家想要了解一個東西時,官方文檔應該是你的第一選擇):

首先我們看一下官方文檔中對UIAlertController的描述,


圖2

文檔中說,我們可以用UIAlertController來替換掉顯示警告的那些UIAlertView,因爲UIAlertController也是控制器,所以我們想要它顯示的時候,我們調用presentViewController這個方法即可顯示。UIAlertController 是通過添加Action將操作和警報控制器相關聯的,addActio:添加相關操作。


下面我們看下如何聲明以及如何添加一些事件。

1.   我們通過類方法去創建一個提示控制器,我們需要注意的是,聲明的時候有一個preferredStyle 的屬性,文檔中表示我們可以根據這個屬性的選擇來確定我們要顯示UIAlertView 還是 UIActionSheet,這個屬性是個枚舉值,我們看一下,如圖:


圖3

我們先創建一個ALert 的,並將它顯示出來


圖4

我們看一下顯示效果

圖5

我們不爲提示控制器添加Action 的話,是沒有按鈕的。

下面我們爲提示控制器添加一些取消確認的事件,如圖:


圖6


我們看下顯示效果:

圖7


我們需要注意一個屬性,style,這個屬性也是枚舉值,裏面包含確認,取消,和警告注意:取消按鈕是唯一的,如果你添加了第二個取消按鈕,那麼程序會報異常

*Terminating app due to uncaught exception ‘NSInternalInconsistencyException’,reason: ‘UIAlertController can only have one action with a style ofUIAlertActionStyleCancel’
很明顯的錯誤提示信息。

UIAlertController具有極大的靈活性,以前我們只能在默認視圖、文本框視圖、密碼框視圖、登錄和密碼輸入框視圖中選擇,現在我們可以向對話框中添加任意數目的UITextField對象,並且可以使用所有的UITextField特性。當您向對話框控制器中添加文本框時,您需要指定一個用來配置文本框的代碼塊。


圖8


這樣就將登陸和密碼的輸入框加上了,如圖:

圖9


基本加載就是這樣了。我們不能光展示而不去用,下面我們來在“好的”按鈕按下時,讀取文本框的值


圖10

我們把“好的”Action改一下,我們看到有個textFields屬性,

注意:textFields actions 屬性,都是只讀屬性,無法進行更改。

如果我們需要對Alert上的按鈕做一些限制的話,我們需要在Action的block方法裏添加Observe,如下圖,我們添加Observe,然後實現方法,當視圖控制器釋放的時候我們需要移除這個Observer,我們通過在每個按鈕動作的handler代碼塊(還有其他任何可能釋放視圖控制器的地方)中添加合適的代碼來實現它。比如說在okAction這個按鈕動作中,非常簡單的操作,大家直接看看代碼吧


//在輸入框中添加 輸入框改變就調用的事件


圖11

//然後調用並實現它


圖12

//然後在“好的”裏我們需要移除它


圖13


Sheet的方法和Alert基本一致,只不過創建時我們把屬性改爲Sheet就可以了,但是我們要注意幾點就是,

一、    Sheet是不允許添加輸入框的,如果你強行加的話,會報異常。

二、    如果上拉菜單中有“取消”按鈕的話,那麼它永遠都會出現在菜單的底部,不管添加的次序是如何(就是這麼任性)。其他的按鈕將會按照添加的次序從上往下依次顯示。《iOS 用戶界面指南》要求所有的“警告”樣式按鈕都必須排名第一。

三、   在iOS 8中我們不再需要小心翼翼地計算出彈出框的大小,    UIAlertController將會根據設備大小自適應彈出框的大小。並且在iPhone或者緊縮寬度的設備中它將會返回nil值。配置該彈出框的代碼如下:

UIPopoverPresentationController *popover =alertController.popoverPresentationController;

    if (popover){

        popover.sourceView =sender;

        popover.sourceRect =sender.bounds;

        popover.permittedArrowDirections = UIPopoverArrowDirectionAny;

    }

UIAlertController 的大致使用方法就是這些了,希望對大家有幫助。文章比較長,主要是瞭解,自己實踐比較好。

如有不對或不足的地方,大家盡情評論,但是不要帶髒話~~~~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章