×

UIAlertController的使用

发表于3年前(Nov 2, 2015 10:32:42 PM)  阅读 5151  评论 0

分类: 移动应用开发 ios

标签: UIAlertController UIAlertActionStyle Alert ActionSheet

应该是从ios8开始,ios将UIAlertView以及UIActionSheet两个控件的功能都合并到UIAlertController了,因为两者无论在功能还是视图上都极其相近,接下来将简单描述下UIAlertController的使用。

1.对话框:

我们先看对话框的最终效果

对应的代码如下:

func showPop1() {
        let alertController = UIAlertController(title: "确认提醒", message: "你确定要提交订单吗?", preferredStyle: UIAlertControllerStyle.Alert)
        
        let okAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: {(action:UIAlertAction) -> Void in
            print("Ok")
        })
        alertController.addAction(okAction)
        
        let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil)
        alertController.addAction(cancelAction)
        self.presentViewController(alertController, animated: true, completion: nil)
    }
2.上拉菜单:

上拉菜单也是用的很多的控件,与对话框的区别是,对话框是在试图中间,而上拉菜单则是从底部弹出,我们只需简单的将上面代码中UIAlertControllerStyle从Alert换成ActionSheet即可。

上面就是这两者的基本用法,可以看到确实是基本一致的,我们只需修改样式就可以在两者之间随意切换。

在web应用中,我们经常会用到select下拉框这个控件,而在ios里面是没有这个控件的,提供给我们的是UIPickerView,这是一个滚轮样式的选择控件,最经典使用场景是用在时间选择上,但是UIPickerView这个控件的样式很难修改,笔者认为,在web端使用select的地方,在移动端都可以使用UIAlertController来替代是最好的方案。

使用Alert样式时,如果只有两个按钮,展现方式就跟最开始的示例一样,两个按钮排一排,如果多于两个,将会每个按钮单独成一行,如下所示:

func showPop3() {
        let alertController = UIAlertController(title: "性别", message: "请选择性别", preferredStyle: UIAlertControllerStyle.Alert)
        
        let alert1 = UIAlertAction(title: "男", style: UIAlertActionStyle.Default, handler: {(action:UIAlertAction) -> Void in
            print("男")
        })
        alertController.addAction(alert1)
        
        let alert2 = UIAlertAction(title: "女", style: UIAlertActionStyle.Default, handler: {(action:UIAlertAction) -> Void in
            print("女")
        })
        alertController.addAction(alert2)
        
        let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil)
        alertController.addAction(cancelAction)
        

        self.presentViewController(alertController, animated: true, completion: nil)
    }
如果选项很多的话,超出整个试图的高度,将会出现滚动条:

func showPop4() {
        let alertController = UIAlertController(title: nil, message: nil, preferredStyle: UIAlertControllerStyle.Alert)
        for var i = 0; i < 15; i++ {
            let alert:UIAlertAction = UIAlertAction(title: "\(i)", style: UIAlertActionStyle.Default, handler: {(action:UIAlertAction) -> Void in
                print("\(i)")
                
            })
            alertController.addAction(alert)
            
        }
        
        let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil)
        alertController.addAction(cancelAction)
        
        self.presentViewController(alertController, animated: true, completion: nil)
    }
上面的AlertView占据了几乎95%的高度,这可能不太好看,我们需要修改下AlertView的高度,这时我们必须使用约束来控制AlertView的高度:

func showPop5() {
        let alertController = UIAlertController(title: nil, message: nil, preferredStyle: UIAlertControllerStyle.Alert)
        for var i = 0; i < 15; i++ {
            let alert:UIAlertAction = UIAlertAction(title: "\(i)", style: UIAlertActionStyle.Default, handler: {(action:UIAlertAction) -> Void in
                print("\(i)")
                
            })
            alertController.addAction(alert)
            
        }
        
        let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Cancel, handler: nil)
        alertController.addAction(cancelAction)
        
        let height:NSLayoutConstraint = NSLayoutConstraint(item: alertController.view, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: self.view.frame.height * 0.60)
        alertController.view.addConstraint(height);
        
        self.presentViewController(alertController, animated: true, completion: nil)
    }
效果如下:

以上的样式同样适用于ActionSheet。

发表评论