iOS警告框和操作表

jopen 8年前發布 | 14K 次閱讀 iOS開發 移動開發

應用如何與用戶交流呢?

警告框(AlertView)和操作表(ActionSheet)就是為此而設計的。

本文案例的原型草圖如圖3-48所示,其中有兩個按鈕“Test警告框”和“Test操作表”,點擊“Test警告 框”按鈕時彈出警告框,它有兩個按鈕。當點擊“Test操作表”按鈕時,屏幕下方將滑出操作表。

一.警告框AlertView

警告框是UIAlertView創建的,用于給用戶以警告或提示,最多有兩個按鈕,超過兩個就應該使用操作表。由于在iOS中,警告框是“模態”的,因此不應該隨意使用。一般情況下,警告框的使用場景有如下幾個。

? 應用不能繼續運行。例如,無法獲得網絡數據或者功能不能完成的時候,給用戶一個警告,這種警告框只需一個按鈕。

? 詢問另外的解決方案。好多應用在不能繼續運行時,會給出另外的解決方案,讓用戶去選擇。例如,Wi-Fi網絡無法連接時,是否可以使用3G網絡。

? 詢問對操作的授權。當應用訪問用戶的一些隱私信息時,需要用戶授權,例如用戶當前的位置、通訊錄或日程表等。

下面看看圖3-48所示案例中警告框的實現過程。使用Single View Application模板,創建一個名為AlertViewActionSheetSample的工程。打開Main.storyboard,按照圖3-49所示擺放兩個按鈕控件。

圖3-49 設計界面

下面我們為這兩個按鈕定義動作事件,ViewController.m中的相關代碼如下:

 

#import "ViewController.h"

@interface ViewController ()<UIAlertViewDelegate>
- (IBAction)alertViewButton:(id)sender;
- (IBAction)actionSheetButton:(id)sender;

@end

  可以看到,視圖控制器實現了UIAlertViewDelegate協議,這個協議是UIAlertView委托協議。點擊

UIAlertView中的按鈕,會給委托對象發送alertView:clickedButtonAtIndex:消息,ViewController.m中的 相關代碼如下:

- (IBAction)alertViewButton:(id)sender {
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"Alert text goes here" delegate:self cancelButtonTitle:@"NO" otherButtonTitles:@"YES", nil];
    [alertView show];
}

#pragma mark  實現UIAlertViewDelegate
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSLog(@"buttonIndex = %li", buttonIndex);
}

  在alertViewButton:方法中實例化UIAlertView對象時,最常用的構造函數是initWithTitle:message: delegate:cancelButtonTitle:otherButtonTitles:,其中delegate參數在本例中設定為self,即該警告 框的委托對象為當前的視圖控制器(ViewController);cancelButtonTitle參數用于設置“取消”按鈕的標題, 它是警告框的左按鈕;otherButtonTitles參數是其他按鈕,它是一個字符串數組,該字符串數組以nil結尾。 從技術層面上講,警告框可以多于兩個按鈕,這都是通過otherButtonTitles參數設定的,但是從用戶體驗上 講,警告框最多有兩個按鈕。效果如圖3-50:

圖3-50 警告框效果圖

如果警告框只有一個按鈕,可以采用下面的語句構造警告框:

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"Alert text goes here" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];

  此時警告框只是給用戶一些警告信息,當用戶點擊OK按鈕時,只是為了關閉警告框,因此不需要指定委托 參數。但是有兩個按鈕的情況下,為了響應點擊警告框按鈕的需要,我們在視圖控制器中實現了 alertView:clickedButtonAtIndex:方法,其中clickedButtonAtIndex參數是按鈕索引,cancelButton按鈕 的索引是0,從左到右依次是1, 2......。

二.操作表ActionSheet

如果想給用戶提供多于兩個的選擇,比如想把應用中的某個圖片發給新浪微博或者非死book等平臺,就應該使用操作表。操作表是UIActionSheet創建的,在iPhone下運行會從屏幕下方滑出來,如圖3-51所示,其布局是最下面是一個“取消”按鈕,它離用戶的大拇指最近,最容易點擊到。如果選項中有一個破壞性的操作,將會放在最上面,是大拇指最不容易碰到的位置,并且其顏色是紅色的。

圖3-51 iPhone中的操作表

下面我們看看圖3-51所示的操作表的代碼部分。修改ViewController.m的代碼,具體如下:

#import "ViewController.h"

@interface ViewController ()<UIAlertViewDelegate,UIActionSheetDelegate>
- (IBAction)alertViewButton:(id)sender;
- (IBAction)actionSheetButton:(id)sender;

@end

  在ViewController.m中,我們聲明了UIActionSheetDelegate協議。UIActionSheetDelegate協議提供了actionSheet: clickedButtonAtIndex:方法,該方法在點擊操作表中的按鈕時調用。ViewController.m中的相關代碼如下:

- (IBAction)actionSheetButton:(id)sender {
    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"破壞性按鈕" otherButtonTitles:@"非死book", @"新浪微博", nil];
    actionSheet.actionSheetStyle = UIActionSheetStyleAutomatic;
    [actionSheet showInView:self.view];
}

#pragma mark  實現UIActionSheetDelegate
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSLog(@"buttonIndex = %li", buttonIndex);
}

  在actionSheetButton:方法中實例化UIActionSheet對象時,最常用的構造函數是initWithTitle:delegate:cancelButtonTitle:destructiveButtonTitle:otherButtonTitles:,本例中將delegate參數設定為self, 即該操作表的委托對象為當前的視圖控制器(ViewController)。cancelButtonTitle參數用于設置“取消”按鈕的 標題,在iPhone中它在最下面。destructiveButtonTitle參數用于設置“破壞性”按鈕,它的顏色是紅色的,如果 沒有“破壞性”按鈕,可以將該參數設定為nil。“破壞性”按鈕只能有一個,在最上面。otherButtonTitles 參數是其他按鈕,它是一個字符串數組,以nil結尾。

UIActionSheet的actionSheetStyle屬性用于設定操作表的樣式,這些樣式如下所示。

? UIActionSheetStyleAutomatic。自動樣式。

? UIActionSheetStyleDefault。默認樣式。

? UIActionSheetStyleBlackTranslucent。半透明樣式。

? UIActionSheetStyleBlackOpaque。透明樣式。

為了響應點擊按鈕,需要在視圖控制器上實現actionSheet:clickedButtonAtIndex:方法,其中 clickedButtonAtIndex參數是按鈕索引,從上到下依次是0, 1, 2......。

來自: http://www.cnblogs.com/chars/p/4990100.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!