IOS复习UIActionSheet&UIAlertView

与前面相同,新建一个Single View Application项目。配置也一样,如下图



打开chenViewController.m

在- (void)viewDidLoad添加方法如下

UIAlertView *alert=[[UIAlertViewalloc]initWithTitle:@"确认上线" message:@"你真的要开始了吗" delegate:self cancelButtonTitle:@"不了"otherButtonTitles:@"真的", nil];
    [alert show];
添加这里是程序刚启动,视图刚加载的时候运行的,如下图所示

 写到这里,我想到一见事情,但是也不重要,很多人都认为nib和xib是同一个概念,
 
 这是我刚学iOS的时候在Big nerd ranch的书籍iOS programming 3rd edition(iOS编程第三版)上看到的,原话如下(章节是1.2创建界面)

XIB文件是XML格式的文本文件,用于保存固化后的对象,构建项目时,Xcode会将XIB文件编译成NIB文件,开发者只需维护XIB文件(XIB文件更容易处理),而应用程序使用(NIB文件体积更小,更容易解析)。

 我们点击【不了】和【真的】时候没有正确的事件,都是取消,为了有响应事件,我们在chenViewController.h添加协议<UIAlertViewDelegate>,如下

#import <UIKit/UIKit.h>
 
@interface chenViewController : UIViewController<UIAlertViewDelegate>
 
@end
然后在chenViewController.m文件中添加方法如下,这是当alert按钮被点击时发生的
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
在方法里添加代码
if (buttonIndex==1) {
        UIActionSheet *actionsheet=[[UIActionSheetalloc]initWithTitle:@"想回家"delegate:self cancelButtonTitle:@"返回"destructiveButtonTitle:@"回家"otherButtonTitles:@"南京", nil];
        [actionsheet showInView:self.view];
    }else if (buttonIndex==0){
        NSLog(@"回家去吧");
    }
做了个判断,上面的cancelButtonTitle:@"不了"otherButtonTitles:@"真的"
中按钮依次是0和1,如果还有就是2.当点击了1【真的】就会弹出一个UIActionSheet,如下



如果是0控制台就会输出回家去吧。,这些按钮有其他事件,比如将被点击,等等很多,这个还需要以后多查看官方文档,
。下面写一下UIActionSheet的点击事件,但是注意的是顺序。
首先在chenViewController.h添加协议UIActionSheetDelegate,多个协议用逗号隔开
<UIAlertViewDelegate,UIActionSheetDelegate>
接着在chenViewController.m中添加方法
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
方法里面添加代码如下
switch (buttonIndex) {
        case 0:
            NSLog(@"回家");
            break;
        case 1:
            NSLog(@"南京");
            break;
        case 2:
            NSLog(@"返回");
            break;
        default:
            break;
    }
这次cancelButtonTitle:@"返回"destructiveButtonTitle:@"回家"otherButtonTitles:@"南京"中按钮排序不一样,因为cancelButtonTitle:@"返回"按钮出现在最下面,所以这个按钮序号在最后,其依次是0,1,上面的顺序是2,0,1
也就是cancelButton后面的destructiveButton是0,otherButton接着是1,cancelButton就是最后一个是2,(如果还有其他的,他就是最后一个otherbutton+1)
如果忘记了或者不明白可以看控制台来调。


其实这两个控件用发非常相视。

想起一句话,学的是思想,技术天天在更新。要想学好,就得学好编程思想。
        2013年8月8日9:46东南大学无锡分校桃园3宿舍106室


补充内容

 
//AlertView已经消失处理的事件
 
-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
 
//AlertView即将消失时,处理的事件
 
-(void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
 
//AlertView 取消时
 
-(void)alertViewCancel:(UIAlertView *)alertView
 
//AlertView已经显示的时候
 
-(void)didPresentAlertView:(UIAlertView *)alertView
 
//AlertView即将显示
 
-(void)willPresentAlertView:(UIAlertView *)alertView
 
- (void)viewDidLoad {
 
        UILabel *numOfBtn = [[UILabel alloc]initWithFrame:CGRectMake(10.0, 10.0, 30.0, 30.0)];
 
        UILabel *titleOfBtn = [[UILabel alloc]initWithFrame:CGRectMake(50.0, 10.0, 100.0, 30.0)];
 
        UILabel *cancelBtnIndex = [[UILabel alloc]initWithFrame:CGRectMake(200.0, 10.0, 30.0, 30.0)];
 
        UILabel *destructiveBtnIndex = [[UILabel alloc]initWithFrame:CGRectMake(10.0, 50.0, 30.0, 30.0)];
 
        UILabel *firstOtherBtnIndex = [[UILabel alloc]initWithFrame:CGRectMake(50.0, 50.0, 30.0, 30.0)];
 
        UIActionSheet *actionSheetTest = [[UIActionSheet alloc]initWithTitle:@"ActionSheetTest"                                                                         delegate:self                                                                         cancelButtonTitle:@"CancelButton"                                                                          destructiveButtonTitle:@"RedButton"                                                                         otherButtonTitles:@"OtherButton1",@"OtherButton2",nil];
 
        //看actionSheet是否可见,这是一个只读属性
 
        BOOL a = actionSheetTest.visible;
 
        NSLog(@"%d",a);
 
        //不考虑指定索引的按钮的动作,可以设置是否有动画
 
        [actionSheetTest dismissWithClickedButtonIndex:0 animated:NO];
 
        //设置标题
 
        actionSheetTest.title = @"ActionSheetTitle";
 
        //通过给定标题添加按钮
 
        [actionSheetTest addButtonWithTitle:@"addButtonWithTitle"];
 
        //按钮总数
 
        numOfBtn.text = [NSString stringWithFormat:@"%d",actionSheetTest.numberOfButtons];
 
        //获取指定索引的标题
 
        titleOfBtn.text = [actionSheetTest buttonTitleAtIndex:4];
 
        //获取取消按钮的索引
 
        cancelBtnIndex.text = [NSString stringWithFormat:@"%d",actionSheetTest.cancelButtonIndex];
 
        //获取红色按钮的索引
 
        destructiveBtnIndex.text = [NSString stringWithFormat:@"%d",actionSheetTest.destructiveButtonIndex];
 
        //获取第一个其他按钮的索引
 
        firstOtherBtnIndex.text = [NSString stringWithFormat:@"%d",actionSheetTest.firstOtherButtonIndex];
 
        //设置actionSheet出现的方式
 
        [actionSheetTest showInView:self.view];//or [actionSheetTest showFromTabBar:] or [actionSheetTest showFromToolBar:]
 
        [self.view addSubview:numOfBtn];
 
        [self.view addSubview:titleOfBtn];
 
        [self.view addSubview:cancelBtnIndex];
 
        [self.view addSubview:destructiveBtnIndex];
 
        [self.view addSubview:firstOtherBtnIndex];
 
        [actionSheetTest release];
 
        [numOfBtn release];
 
        [titleOfBtn release];
 
        [cancelBtnIndex release];
 
        [destructiveBtnIndex release];
 
        [firstOtherBtnIndex release];
 
        [super viewDidLoad];
 
}
这个方法现在已经淘汰了
 
- (void)viewDidUnload {
 
}
这个方法使用arc后也不需要了,(我一直没使用,但是别人博客经常看到)
 
- (void)dealloc {
 
        [super dealloc];
 
}
 
#pragma mark -- UIActionSheetDelegate --
 
//根据被点击按钮的索引处理点击事件
 
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
 
        NSLog(@"clickedButtonAtIndex:%d",buttonIndex);
 
}
 
//ActionSheet已经消失时
 
- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
 
        NSLog(@"didDismissWithButtonIndex:%d",buttonIndex);
 
}
 
//ActionSheet即将消失时
 
- (void)actionSheet:(UIActionSheet *)actionSheet willDismissWithButtonIndex:(NSInteger)buttonIndex {
 
        NSLog(@"willDismissWithButtonIndex:%d",buttonIndex);
 
}
 
//
 
- (void)actionSheetCancel:(UIActionSheet *)actionSheet {
 
        NSLog(@"actionSheetCancel");  
 
          
 
}  
 
//ActionSheet已经显示时  
 
- (void)didPresentActionSheet:(UIActionSheet *)actionSheet {  
 
        NSLog(@"didPresentActionSheet%@",actionSheet);  
 
}  
 
//ActionSheet即将显示时  
 
- (void)willPresentActionSheet:(UIActionSheet *)actionSheet {  
 
        NSLog(@"willPresentActionSheet%@",actionSheet);  
 
}  
 
 
 
@end  
 
- (void)viewDidLoad {
 
        //初始化AlertView
 
        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"AlertViewTest"
 
                                                          message:@"message"
 
                                                          delegate:self
 
                                                          cancelButtonTitle:@"Cancel"
 
                                                          otherButtonTitles:@"OtherBtn",nil];
 
        //设置标题与信息,通常在使用frame初始化AlertView时使用
 
        alert.title = @"AlertViewTitle";
 
        alert.message = @"AlertViewMessage";
 
    
 
        //这个属性继承自UIView,当一个视图中有多个AlertView时,可以用这个属性来区分
 
        alert.tag = 0;
 
    
 
        //只读属性,看AlertView是否可见
 
        NSLog(@"%d",alert.visible);
 
    
 
        //通过给定标题添加按钮
 
        [alert addButtonWithTitle:@"addButton"];
 
    
 
        //按钮总数
 
        NSLog(@"numberOfButtons:%d",alert.numberOfButtons);
 
    
 
        //获取指定索引的按钮的标题
 
        NSLog(@"buttonTitleAtIndex:%@",[alert buttonTitleAtIndex:2]);
 
    
 
        //获得取消按钮的索引
 
        NSLog(@"cancelButtonIndex:%d",alert.cancelButtonIndex);
 
    
 
        //获得第一个其他按钮的索引
 
        NSLog(@"firstOtherButtonIndex:%d",alert.firstOtherButtonIndex);
 
    
 
        //显示AlertView
 
        [alert show];
 
    
 
        [alert release];
 
        [super viewDidLoad];
 
}
 
#pragma mark  -- UIAlertViewDelegate --
 
//根据被点击按钮的索引处理点击事件
 
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
 
        NSLog(@"clickedButtonAtIndex:%d",buttonIndex);
 
}
 
//AlertView已经消失时
 
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
 
        NSLog(@"didDismissWithButtonIndex");
 
}
 
//AlertView即将消失时
 
- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex {
 
        NSLog(@"willDismissWithButtonIndex");
 
}
 
 
 
- (void)alertViewCancel:(UIAlertView *)alertView {
 
        NSLog(@"alertViewCancel");  
 
}  
 
//AlertView已经显示时  
 
- (void)didPresentAlertView:(UIAlertView *)alertView {  
 
        NSLog(@"didPresentAlertView");  
 
}  
 
//AlertView即将显示时  
 
- (void)willPresentAlertView:(UIAlertView *)alertView {  
 
        NSLog(@"willPresentAlertView");  
 
}
               日期忘记写了

原文地址:https://www.cnblogs.com/ioschen/p/3248834.html