博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift之UITextField+富文本+代理传值
阅读量:6577 次
发布时间:2019-06-24

本文共 7519 字,大约阅读时间需要 25 分钟。

###导语: UITextField有许多好玩好用的地方,因此敝人整理了一些知识点和技巧分享给大家。

####一、初始化

var textField: UITextField! override func viewDidLoad() {        super.viewDidLoad() let width = UIScreen.mainScreen().bounds.width                //创建UITextField,并设置背景颜色        let textField: UITextField = UITextField(frame: CGRectMake(50,100,width - 100,30))//        textField.backgroundColor = UIColor.yellowColor()        self.view.addSubview(textField)        self.textField = textField}复制代码

####二、基本属性

//1.设置背景视图,设置占位符,使用KVC设置占位符的颜色,文本字体及其颜色//        textField.background = UIImage(named: "1.jpg")        textField.placeholder = "任大树有感"        textField.setValue(UIColor.blueColor(), forKeyPath: "placeholderLabel.textColor")        textField.font = UIFont.systemFontOfSize(17)//系统默认字体        textField.font = UIFont(name: "CourierNewPSMT", size: 17)//自定义字体和大小        textField.textColor = UIColor.blackColor()        textField.tintColor = UIColor.redColor()//光标及清除按钮颜色                        //2.设置对齐方式及垂直对齐方式,文本框样式,最小字体,自动适应标签大小        textField.textAlignment = .Center        textField.contentVerticalAlignment = .Bottom         /* 文本框样式         None  不做修饰         Line  线条         Bezel 斜面         RounderRect  扁平化         */        textField.borderStyle = .RoundedRect        textField.minimumFontSize = 10.0//默认0.0        textField.adjustsFontSizeToFitWidth = true复制代码

####三、高级点儿的常用属性

1.设置删除效果,编辑状态,文本框是否可用,首字母是否大写/* 删除效果         Never 不显示清除按钮         WhileEditing 编辑时才出现清除按钮         UnlessEditing 完成编辑后才出现清除按钮         Always 一直都显示清除按钮         */        textField.clearButtonMode = .Always        textField.editing        //        textField.enabled = false        /* 首字母是否大写         enum UITextAutocapitalizationType : Int {                  case None   不自动大写         case Words  单词首字母大写         case Sentences  句子的首字母大写         case AllCharacters  所有字母都大写         }         */        self.textField.autocapitalizationType = .AllCharacters        self.textField.becomeFirstResponder()//成为第一响应//2.创建左视图及其显示类型,创建右视图及其显示类型  let leftView: UIImageView = UIImageView(frame: CGRectMake(0,0,30,30))        leftView.image = UIImage(named: "1.jpg")        /* 同上         Never 不显示         WhileEditing 编辑时才出现         UnlessEditing 完成编辑后才出现         Always 一直都显示         */        textField.leftView = leftView        textField.leftViewMode = .Always        //右视图,可能盖住了清除按钮        let rightView: UIImageView = UIImageView(frame: CGRectMake(0,0,30,30))        rightView.backgroundColor = UIColor.purpleColor()        textField.rightView = rightView        textField.rightViewMode = .UnlessEditing/*         3.键盘外观         enum UIKeyboardAppearance : Int {                  case Default 默认外观         case Dark  深灰石墨色         case Light  浅灰色                  }         */        textField.keyboardAppearance = .Dark                /*         4.完成的按钮样式         enum UIReturnKeyType : Int {                  case Default   默认灰色按钮,标有Return         case Go   标有go的蓝色按钮         case Google  标有Search的蓝色按钮         case Join   标有Join的蓝色按钮         case Next  标有Next的灰色按钮         case Route  标有Route的蓝色按钮         case Search  标有Search的蓝色按钮         case Send    标有Send的蓝色按钮         case Yahoo  标有Search的蓝色按钮         case Done   标有Done的蓝色按钮         case EmergencyCall   标有EmergencyCall(紧急呼叫)的蓝色按钮         @available(iOS 9.0, *)         case Continue     标有Continue的灰色按钮         }         */        textField.returnKeyType = .Continue复制代码

###四、UITextField代理方法

//1.文本框将要开始编辑时,触发的事件    func textFieldShouldBeginEditing(textField: UITextField) -> Bool{ // return NO to disallow editing.(如果返回 false 文本框将不允许编辑)                return true    }    //2.文本框开始编辑,所作的事儿    func textFieldDidBeginEditing(textField: UITextField){ // became first responder        }    //3.文本框将要结束编辑时,触发该事件    func textFieldShouldEndEditing(textField: UITextField) -> Bool{ // return YES to allow editing to stop and to resign first responder status. NO to disallow the editing session to end        return true    }    //4.文本框结束编辑,触发的事件。    func textFieldDidEndEditing(textField: UITextField){ // may be called if forced even if shouldEndEditing returns NO (e.g. view removed from window) or endEditing:YES called                    }    //5.文本框内容改变触发该事件,能得到改变的坐标和改变的内容    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool{ // return NO to not change text(返回 false 不可改变文本)                        return true    }    //6.文本框清空时触发该事件    func textFieldShouldClear(textField: UITextField) -> Bool{ // called when clear button pressed. return NO to ignore (no notifications) (返回true,当清除按钮点击时回调此方法,返回false则忽视)            print("文本框内容被清除拉!!")                       return true    }    //7.点击键盘中的return键,触发该事件    func textFieldShouldReturn(textField: UITextField) -> Bool{ // called when 'return' key pressed. return NO to ignore.                print("点击了键盘中的return")//微信把此事件改为 发送消息事件        return true    }复制代码

###五、监听方法

//监听的方法    func notificationAction() {                NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(textDidChange), name: UITextFieldTextDidChangeNotification, object: nil)                NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(textDidEndEditing), name: UITextFieldTextDidEndEditingNotification, object: nil)                NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(textDidBeginEditing), name: UITextFieldTextDidBeginEditingNotification, object: nil)    }    func textDidChange() {       print("每次编辑触发该事件")    }    func textDidEndEditing() {       print("结束编辑触发该事件")    }    func textDidBeginEditing() {       print("开始编辑")    } //MARK: - 移除监听    override func viewDidDisappear(animated: Bool) {        super.viewDidDisappear(true)        NSNotificationCenter.defaultCenter().removeObserver(self)    }复制代码

###六、富文本设置

//1.创建富文本  let attributeStr: NSMutableAttributedString = NSMutableAttributedString(string: "任大树有感") //2.设置字体     attributeStr.addAttribute(NSFontAttributeName, value: UIFont(name: "CourierNewPSMT", size: 17)!, range: NSRange(location: 0,length: 3)) //3.设置字体颜色    attributeStr.addAttribute(NSForegroundColorAttributeName, value: UIColor.lightGrayColor(), range: NSRange(location: 0,length: 5)) //4.设置背景颜色     attributeStr.addAttribute(NSBackgroundColorAttributeName, value: UIColor.yellowColor(), range: NSRange(location: 3, length: 2))      self.textField.attributedPlaceholder = attributeStr      复制代码

###七、代理传值

第一步:在发送页面设置:/** 1、制定代理,实现传值 名称命名规范:本类名+Delegate */protocol OtherViewControllerDelegate: NSObjectProtocol {    /**     2、定义协议方法,用来传值     */    func changeValueWithUITextField(text: String)} /**     3、定义一个weak属性的代理     */    weak var delegate: OtherViewControllerDelegate!                   /**         4、发送代理         */@IBAction func clicked(sender: AnyObject) {self.delegate!.changeValueWithUITextField(self.textField.text!)                self.navigationController?.popViewControllerAnimated(true)    }第二步:在接受页面设置:0.设置按钮跳转页面   //代理传值方法    @IBAction func clicked(sender: AnyObject) {        //代理传值        let otherVC: OtherViewController = OtherViewController()        otherVC.delegate = self        self.navigationController?.pushViewController(otherVC, animated: true)    }/** 1、遵守代理传值协议 */class ViewController: UIViewController,UITextFieldDelegate,OtherViewControllerDelegate {}/**2.实现协议方法*/    func changeValueWithUITextField(text: String) {        self.textField.text = text    }复制代码

附上Demo->

###结束语: 有位名人说:“人的聪明之处在于明白自己的无知。”

转载于:https://juejin.im/post/5b0e69f86fb9a009e8212605

你可能感兴趣的文章
LA 2572 Viva Confetti (Geometry.Circle)
查看>>
[NOI2015]程序自动分析
查看>>
innerHTML、innerText和outerHTML、outerText的区别
查看>>
__name__的意义与作用
查看>>
eclipse快捷键
查看>>
Java 异常
查看>>
Mysql 时间类型整理
查看>>
IOS调试—断点调试以及动态输出
查看>>
编译找错
查看>>
CSS边距---盒子模型
查看>>
Linux vi命令
查看>>
p1098 逆序对
查看>>
java防止浏览器直接打开下载的文件
查看>>
关于python中的round()和javascript中的round()的比较
查看>>
写程序注意
查看>>
linux下虚拟主机配置
查看>>
正则表达式(转)
查看>>
js方法实现rgb颜色转换成16进制格式的代码的方法
查看>>
jQuery原型方法first,last,eq,slice源码分析
查看>>
IOS应用之一--异常处理(UncaughtExceptionHandler)
查看>>