iOS UIAlertView和UIActionSheet的用法

來源:互聯網
上載者:User

這篇文章主要學習alertview 和 actionsheet這兩個控制項的使用。Action Sheet是從底部彈出,上面有2個或者2個以上的選項供使用者選擇,Alert就是一個警告框,上面有1個或者1個以上的按鈕供使用者進行選擇。

(說明:其實這兩個不是控制項,而是ios 中的兩個類,這裡暫且這麼叫吧。這2個類定義了2種不同類型的用於和使用者互動的彈出框)

首先,使用這兩個類要使用到其代理,UIAlertViewDelegate 和 UIAlertViewDelegate 。

下面,借用別的部落格上的一段話來稍稍闡述一下delegate。

ios中有很多已經定義好的類可以供我們在編寫程式時直接使用,例如UIActionSheet、UIAlertView等,這些類定義了很多method,我們可以調用這些method且不必知道這些method是如何?的。但是有一個問題,如果我們想改變這些method的實現,那我們該這麼做呢?一種方法是繼承,我們可以繼承一個類,然後在自己的類中重新寫method,這是一個方法,但不是一個很方便的方法,有時候你僅僅需要改變很小的一個功能,卻要繼承一個很大的類,貌似有點複雜了,而且如果你需要一些不同的實現,那你就需要定義好多不同的類,這會很麻煩。為了使開發過程更加的方便,ios使用了另一種方法來達到同樣的目的,就是使用delegate,我們使用一個已定義的類,然後使用委託\代理來改寫類中的method,程式在運行時,delegate發現你建立了某個類的執行個體且改寫了其中的method,這樣程式在運行時就不會去調用原有的實現(當然你也可以調用原有的實現),而是直接調用你寫的新的實現,從而達到自訂程式方法的目的。

首先介紹actionsheet。

1、只有一個OK按鍵

- (void)dialogSimpleAction{// open a dialog with just an OK buttonUIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"UIActionSheet <title>"delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"OK" otherButtonTitles:nil];actionSheet.actionSheetStyle = UIActionSheetStyleDefault;[actionSheet showInView:self.view];// show from our table view (pops up in the middle of the table)}

上面code中的最後一行:
[actionSheet showInView:self.view]
作用是顯示actionSheet,每一個ActionSheet都需要有一個parent view,在parent view中顯示自己,因為我們是單一視圖項目(Single View),也只有一個View,因此這裡的self.view就是說在actionSheet實現的這個view裡顯示。

注意其中的style有以下四種類型:

UIActionSheetStyleSpecifies the style of an action sheet.typedef enum {   UIActionSheetStyleAutomatic        = -1,   UIActionSheetStyleDefault          = UIBarStyleDefault,   UIActionSheetStyleBlackTranslucent = UIBarStyleBlackTranslucent,   UIActionSheetStyleBlackOpaque      = UIBarStyleBlackOpaque,} UIActionSheetStyle;

2、有一個OK 和 Cancel 按鍵

- (void)dialogOKCancelAction{// open a dialog with an OK and cancel buttonUIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"UIActionSheet <title>"delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"OK" otherButtonTitles:nil];actionSheet.actionSheetStyle = UIActionSheetStyleDefault;[actionSheet showInView:self.view]; // show from our table view (pops up in the middle of the table)}

3、含有兩個custom(自訂)按鍵

- (void)dialogOtherAction{// open a dialog with two custom buttonsUIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"UIActionSheet <title>"delegate:self cancelButtonTitle:nil destructiveButtonTitle:nilotherButtonTitles:@"Button1", @"Button2", nil];actionSheet.actionSheetStyle = UIActionSheetStyleDefault;actionSheet.destructiveButtonIndex = 1;// make the second button red (destructive)[actionSheet showInView:self.view]; // show from our table view (pops up in the middle of the table)}

注意其中的actionSheet.destructiveButtonIndex = 1;// make the second button red (destructive)


重點,這裡要實現前面說到的UIActionSheetDelegate ,這裡要實現一個方法。

#pragma mark - UIActionSheetDelegate- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{    // the user clicked one of the OK/Cancel buttonsif (buttonIndex == 0){NSLog(@"ok");}else{NSLog(@"cancel");}}

其中的buttonIndex就是分別對應哪一個按鍵,注意是從0開始的。


接著介紹alert。

1、只有一個OK按鍵

- (void)alertSimpleAction{// open an alert with just an OK buttonUIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"UIAlertView" message:@"<Alert message>"delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];[alert show];}

2、有OK 和 Cancel 兩個按鍵

- (void)alertOKCancelAction{// open a alert with an OK and cancel buttonUIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"UIAlertView" message:@"<Alert message>"delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];[alert show];}

3、有多個按鍵,包含custom(自訂) 按鍵

- (void)alertOtherAction{// open an alert with two custom buttonsUIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"UIAlertView" message:@"<Alert message>"delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Button1", @"Button2", nil];[alert show];}

4、在提示框中有輸入框,用以輸入資訊

- (void)alertSecureTextAction{// open an alert with two custom buttonsUIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"UIAlertView" message:@"Enter a password:"                                                   delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];alert.alertViewStyle = UIAlertViewStyleSecureTextInput; //An alert that allows the user to enter text. The text field is obscured(遮蔽)        [alert show];}

這個是ios5之後新增的一個提示框,包含輸入框用於輸入使用者名稱或者密碼。

其中的alertViewStyle含有這幾種類型。

UIAlertViewStyleThe presentation style of the alert.typedef enum {   UIAlertViewStyleDefault = 0,   UIAlertViewStyleSecureTextInput,   UIAlertViewStylePlainTextInput,   UIAlertViewStyleLoginAndPasswordInput} UIAlertViewStyle;

上面說到,這是ios5之後才有的功能,那麼可以用以下的代碼檢測裝置是否支援。

// create a temporary alert to test it's feature availability    UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:nil                                                     message:nil                                                    delegate:self                                           cancelButtonTitle:nil                                           otherButtonTitles: nil] autorelease];    // only add this part to the table if secure alerts are available    if ([alert respondsToSelector:@selector(alertViewStyle)])    {            }

接下來就是,alert的代理方法的實現啦。

#pragma mark - UIAlertViewDelegate- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{// use "buttonIndex" to decide your action}


下面對第四中提示框實現代理方法。實現如何擷取從提示框中輸入的資訊。

- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{// use "buttonIndex" to decide your action    UITextField *passWord = [actionSheet textFieldAtIndex:0];    if (buttonIndex == 1) {        NSLog(@"password :%@",passWord.text);    }}

稍稍解說一下吧: 其中[actionSheet textFieldAtIndex:0]表示的第幾個輸入框;buttonIndex就是表示第幾個按鍵啦。

附註:以上代碼大部分來自一個demo,UICatalog。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.