在iOS8中,苹果对UIAlertView和UIActionSheet进行了重新的封装,成为适应性更强,灵活性更高的UIAlertController。具体使用方法如下。

      UIAlertController具有两种风格,即

UIAlertControllerStyleActionSheet
UIAlertControllerStyleAlert

至于其使用方法也是非常简单得 ,代码如下

UIAlertController*alert=[UIAlertController alertControllerWithTitle:@"警告框" message:nil preferredStyle:UIAlertControllerStyleAlert];
    [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
        NSLog(@"确定");
    }]];
    [alert addAction:[UIAlertAction actionWithTitle:@"警示性" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) {
        NSLog(@"不确定");
    }]];
    [alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {
        NSLog(@"取消");
    }]];
    [self presentViewController:al animated:YES completion:nil];

以上代码,既可以实现UIAlertView也可以实现ActionSheet, 只需要修改初始化的第三个参数,便可实现相应得弹窗。

       如果是UIAlertControllerStyle当然还可以添加文本框

[alert addTextFieldWithConfigurationHandler:^(UITextField *textField) {
        textField.placeholder=@"一个文本框";
    }];

如果要读取文本框中的内容

[alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
        UITextField * textField=al.textFields.firstObject;
        NSLog(@"%@",textField.text);
    }]];

以上便是UIAlertController的使用方法,但是,当我们在使用UIAlertControllerStyleActionSheet时需要注意,通过以上方法,我们将actionSheet运行在iPhone这样的设备上是没有问题得,但是如果运行在大屏得ipad上便会出现崩溃。 这是因为弹出框必须要有一个锚点,即 anchor point。当我们在iPhone等常规屏幕的设备上使用actionSheet时,很明显,锚点在屏幕下方,而在大屏得ipad上,则需要我们自己手动设置。只需要加入以下代码

UIPopoverPresentationController * popover=al.popoverPresentationController;
    UIButton * button=(UIButton *)sender;
    if (popover) {
        popover.sourceRect=button.bounds;
        popover.sourceView=button;
        popover.permittedArrowDirections=UIPopoverArrowDirectionAny;
    }

另外,当我们在使用此方法后,ipad上加入的UIAlertActionStyleCancel风格的按钮是不显示,即默认去掉了取消按钮。

 

posted on 2015-04-01 16:53  iCalabash  阅读(377)  评论(0编辑  收藏  举报