Swift之UITextField+富文本+代理传值

导语:

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->UITextField_Demo

结束语:

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容