美文网首页swiftSwift聚焦swift
利用Swift2.0编写UIAlertController

利用Swift2.0编写UIAlertController

作者: 4ba6804ff45f | 来源:发表于2016-01-05 15:44 被阅读1386次
  • 上次使用Objective-C语言介绍了UIAlertController大致的用法,最近正好在学习swift,这次我们使用swift语言来添加UIAlertController。
    另外先附上上一篇的链接,里边介绍了UIAlertController的大致用法。关于UIAlertController的用法

下面我们仍然采用上一篇的结构来写,方便对两种语言下的编写形成对照。还是两种风格分开介绍。如果有什么没有涉及到也可以结合上一篇来看。

一、AlertView

  • 还是首先创建一个UIAlertController对象。这里其实我的写法还是骨子里透着OC的灵魂,各个地方都比较规整。在第一部分先这样写,跟OC对照着看效率会比较高,在下一部分会采用『能省则省』的写法来写。
let alertView: UIAlertController = UIAlertController.init(title: "AlertView", message: "I want to tell you something", preferredStyle: UIAlertControllerStyle.Alert)
  • 然后我们再给它添加两个按钮,如果不添加任何按钮跳转到UIAlertController是无法返回的。
let alertViewAction: UIAlertAction = UIAlertAction.init(title: "确定", style: UIAlertActionStyle.Default, handler: { (UIAlertAction) -> Void in 
      })          
let alertViewCancelAction: UIAlertAction = UIAlertAction.init(title: "取消", style: UIAlertActionStyle.Cancel, handler: nil)           
alertView.addAction(alertViewAction)
alertView.addAction(alertViewCancelAction)

效果如图:


  • 当然按钮的style还是三种『默认』、『取消』、『销毁』,我们再给它添加一个『销毁』风格的按钮:
let alertViewDestructive: UIAlertAction = UIAlertAction.init(title: "销毁", style: UIAlertActionStyle.Destructive, handler: { (UIAlertAction) -> Void in
 })
alertView.addAction(alertViewDestructive)

如图:


  • 如果需要在点击时触发某些事件,可以写在handler:这个属性后边的闭包中(相当于OC中的block又有些许不同)。比如我们继续添加一个textField然后在闭包中设置一些属性。
 alertView.addTextFieldWithConfigurationHandler({ (UITextField) -> Void in
                UITextField.placeholder = "name"
                UITextField.clearButtonMode = UITextFieldViewMode.WhileEditing
            })

效果如图:


  • 最后千万记得跳转到我们创建的alertView上:
self.presentViewController(alertView, animated:true , completion: nil)

二、ActionSheet

  • 创建一个ActionSheet风格的AlertController:
let alertSheet = UIAlertController.init(title: "alertSheet", message: "no message", preferredStyle: .ActionSheet)
  • 跟上边相比较,少了明确声明类型和选择风格时的前缀。这也是我很喜欢的一点,特别是选择风格时只需要使用点语法就可以,再加上Xcode强大的提示和功能,一目了然,而且很难选错。

  • 然后同上边一样我们继续给他添加上三个风格的按钮。

let alertSheetAction = UIAlertAction.init(title: "确定", style: .Default, handler: nil)
alertSheet.addAction(alertSheetAction)
let alertSheetCancel = UIAlertAction.init(title: "取消", style: .Cancel, handler: nil)
alertSheet.addAction(alertSheetCancel)
let alertSheetDestructive = UIAlertAction.init(title: "销毁", style: .Destructive, handler: nil)
alertSheet.addAction(alertSheetDestructive)

效果如图:


  • 当然也同OC中一样,把title与message两个属性设置为nil便可以隐藏掉最上边一栏只剩下按钮。
let alertSheet = UIAlertController.init(title: nil, message: nil, preferredStyle: .ActionSheet)

效果如下:


  • 在上一篇中没有提到,其实这种方法在AlertView风格中也是试用的。不过····效果你自己看吧!
  • 真的蛮不可接受的····。去掉textField还可以。

顺便补上监听传值的那一部分

  • 这是设置监听的那一部分,在textField的闭包中设置
alertView.addTextFieldWithConfigurationHandler({ (UITextField) -> Void in
UITextField.placeholder = "name"
UITextField.clearButtonMode = UITextFieldViewMode.WhileEditing
                
// 设置监听
 _ = NSNotificationCenter.defaultCenter().addObserver(self, selector: "textChange:" , name: UITextFieldTextDidChangeNotification, object: UITextField)
                
})
  • 监听方法
func textChange(notification: NSNotification) {
   let textFied = notification.object as! UITextField      
   textLabel.text = textFied.text
}
  • 释放监听
deinit {
    NSNotificationCenter.defaultCenter().removeObserver(self)
}

总结

控件的使用方法几乎是没有变化的,而且swift在语法上要简洁很多很多。使用起来也非常方便高效,如果你还在OC的坑里摸不着头脑,直接学习swift吧!

代码传送门

相关文章

网友评论

  • 春不语:博主,源码地址失效了
    4ba6804ff45f:@春不语 https://github.com/Leon-Kang/UIAlertController 谢谢提醒,已更新。
  • a12443b86c0d:可靠!不多说! :+1:
  • 0294b96fe4db:哈哈 感谢博主
  • 花前月下:swift的语法确实很好。虽然可能刚学的时候摸不着头脑,但是你会爱上它的。:smile::smile:
    4ba6804ff45f:@花前月下 对的!语法简单易用!就是刚从oc转过来也是不大习惯.....不过适应了感觉的确比oc好用!

本文标题:利用Swift2.0编写UIAlertController

本文链接:https://www.haomeiwen.com/subject/hvrzhttx.html