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

導(dǎo)語:

UITextField有許多好玩好用的地方,因此敝人整理了一些知識點和技巧分享給大家拿愧。

一杠河、初始化

var textField: UITextField!

 override func viewDidLoad() {
        super.viewDidLoad()
 let width = UIScreen.mainScreen().bounds.width
        
        //創(chuàng)建UITextField,并設(shè)置背景顏色
        let textField: UITextField = UITextField(frame: CGRectMake(50,100,width - 100,30))
//        textField.backgroundColor = UIColor.yellowColor()
        self.view.addSubview(textField)
        self.textField = textField
}

二、基本屬性

//1.設(shè)置背景視圖,設(shè)置占位符浇辜,使用KVC設(shè)置占位符的顏色感猛,文本字體及其顏色
//        textField.background = UIImage(named: "1.jpg")
        textField.placeholder = "任大樹有感"
        textField.setValue(UIColor.blueColor(), forKeyPath: "placeholderLabel.textColor")
        textField.font = UIFont.systemFontOfSize(17)//系統(tǒng)默認(rèn)字體
        textField.font = UIFont(name: "CourierNewPSMT", size: 17)//自定義字體和大小
        textField.textColor = UIColor.blackColor()
        textField.tintColor = UIColor.redColor()//光標(biāo)及清除按鈕顏色
        
        
        //2.設(shè)置對齊方式及垂直對齊方式,文本框樣式,最小字體奢赂,自動適應(yīng)標(biāo)簽大小
        textField.textAlignment = .Center
        textField.contentVerticalAlignment = .Bottom 
        /* 文本框樣式
         None  不做修飾
         Line  線條
         Bezel 斜面
         RounderRect  扁平化
         */
        textField.borderStyle = .RoundedRect
        textField.minimumFontSize = 10.0//默認(rèn)0.0
        textField.adjustsFontSizeToFitWidth = true

三陪白、高級點兒的常用屬性

1.設(shè)置刪除效果,編輯狀態(tài)膳灶,文本框是否可用咱士,首字母是否大寫
/* 刪除效果
         Never 不顯示清除按鈕
         WhileEditing 編輯時才出現(xiàn)清除按鈕
         UnlessEditing 完成編輯后才出現(xiàn)清除按鈕
         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()//成為第一響應(yīng)

//2.創(chuàng)建左視圖及其顯示類型,創(chuàng)建右視圖及其顯示類型
  let leftView: UIImageView = UIImageView(frame: CGRectMake(0,0,30,30))
        leftView.image = UIImage(named: "1.jpg")
        /* 同上
         Never 不顯示
         WhileEditing 編輯時才出現(xiàn)
         UnlessEditing 完成編輯后才出現(xiàn)
         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 默認(rèn)外觀
         case Dark  深灰石墨色
         case Light  淺灰色
         
         }
         */
        textField.keyboardAppearance = .Dark
        
        /*


         4.完成的按鈕樣式
         enum UIReturnKeyType : Int {
         
         case Default   默認(rèn)灰色按鈕序厉,標(biāo)有Return
         case Go   標(biāo)有g(shù)o的藍(lán)色按鈕
         case Google  標(biāo)有Search的藍(lán)色按鈕
         case Join   標(biāo)有Join的藍(lán)色按鈕
         case Next  標(biāo)有Next的灰色按鈕
         case Route  標(biāo)有Route的藍(lán)色按鈕
         case Search  標(biāo)有Search的藍(lán)色按鈕
         case Send    標(biāo)有Send的藍(lán)色按鈕
         case Yahoo  標(biāo)有Search的藍(lán)色按鈕
         case Done   標(biāo)有Done的藍(lán)色按鈕
         case EmergencyCall   標(biāo)有EmergencyCall(緊急呼叫)的藍(lán)色按鈕
         @available(iOS 9.0, *)
         case Continue     標(biāo)有Continue的灰色按鈕
         }
         */
        textField.returnKeyType = .Continue

四、UITextField代理方法

 //1.文本框?qū)⒁_始編輯時毕箍,觸發(fā)的事件
    func textFieldShouldBeginEditing(textField: UITextField) -> Bool{ // return NO to disallow editing.(如果返回 false 文本框?qū)⒉辉试S編輯)
        
        return true
    }
    //2.文本框開始編輯弛房,所作的事兒
    func textFieldDidBeginEditing(textField: UITextField){ // became first responder
    
    }
    //3.文本框?qū)⒁Y(jié)束編輯時,觸發(fā)該事件
    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.文本框結(jié)束編輯而柑,觸發(fā)的事件文捶。
    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.文本框內(nèi)容改變觸發(fā)該事件荷逞,能得到改變的坐標(biāo)和改變的內(nèi)容
    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool{ // return NO to not change text(返回 false 不可改變文本)
        
        
        return true
    }
    //6.文本框清空時觸發(fā)該事件
    func textFieldShouldClear(textField: UITextField) -> Bool{ // called when clear button pressed. return NO to ignore (no notifications) (返回true,當(dāng)清除按鈕點擊時回調(diào)此方法粹排,返回false則忽視)
    
        print("文本框內(nèi)容被清除拉V衷丁!")
        
       
        return true
    }
    //7.點擊鍵盤中的return鍵顽耳,觸發(fā)該事件
    func textFieldShouldReturn(textField: UITextField) -> Bool{ // called when 'return' key pressed. return NO to ignore.
        
        print("點擊了鍵盤中的return")//微信把此事件改為 發(fā)送消息事件
        return true
    }

五坠敷、監(jiān)聽方法

//監(jiān)聽的方法
    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("每次編輯觸發(fā)該事件")
    }
    func textDidEndEditing() {
       print("結(jié)束編輯觸發(fā)該事件")
    }
    func textDidBeginEditing() {
       print("開始編輯")
    }


 //MARK: - 移除監(jiān)聽
    override func viewDidDisappear(animated: Bool) {
        super.viewDidDisappear(true)
        NSNotificationCenter.defaultCenter().removeObserver(self)
    }

六、富文本設(shè)置

 //1.創(chuàng)建富文本
  let attributeStr: NSMutableAttributedString = NSMutableAttributedString(string: "任大樹有感")
 //2.設(shè)置字體     
attributeStr.addAttribute(NSFontAttributeName, value: UIFont(name: "CourierNewPSMT", size: 17)!, range: NSRange(location: 0,length: 3))
 //3.設(shè)置字體顏色    
attributeStr.addAttribute(NSForegroundColorAttributeName, value: UIColor.lightGrayColor(), range: NSRange(location: 0,length: 5))
 //4.設(shè)置背景顏色     
attributeStr.addAttribute(NSBackgroundColorAttributeName, value: UIColor.yellowColor(), range: NSRange(location: 3, length: 2))

      self.textField.attributedPlaceholder = attributeStr
      

七射富、代理傳值

第一步:在發(fā)送頁面設(shè)置:
/**
 1膝迎、制定代理,實現(xiàn)傳值 名稱命名規(guī)范:本類名+Delegate
 */
protocol OtherViewControllerDelegate: NSObjectProtocol {
    /**
     2胰耗、定義協(xié)議方法限次,用來傳值
     */
    func changeValueWithUITextField(text: String)
}
 /**
     3、定義一個weak屬性的代理
     */
    weak var delegate: OtherViewControllerDelegate!
            
       /**
         4宪郊、發(fā)送代理
         */
@IBAction func clicked(sender: AnyObject) {
self.delegate!.changeValueWithUITextField(self.textField.text!)
        
        self.navigationController?.popViewControllerAnimated(true)
    }


第二步:在接受頁面設(shè)置:
0.設(shè)置按鈕跳轉(zhuǎn)頁面
   //代理傳值方法
    @IBAction func clicked(sender: AnyObject) {
        //代理傳值
        let otherVC: OtherViewController = OtherViewController()
        otherVC.delegate = self
        self.navigationController?.pushViewController(otherVC, animated: true)
    }

/**
 1掂恕、遵守代理傳值協(xié)議
 */
class ViewController: UIViewController,UITextFieldDelegate,OtherViewControllerDelegate {}
/**
2.實現(xiàn)協(xié)議方法
*/
    func changeValueWithUITextField(text: String) {
        self.textField.text = text
    }

附上Demo->UITextField_Demo

結(jié)束語:

有位名人說:“人的聰明之處在于明白自己的無知拖陆〕诨保”

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市依啰,隨后出現(xiàn)的幾起案子乎串,更是在濱河造成了極大的恐慌,老刑警劉巖速警,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叹誉,死亡現(xiàn)場離奇詭異,居然都是意外死亡闷旧,警方通過查閱死者的電腦和手機长豁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來忙灼,“玉大人匠襟,你說我怎么就攤上這事「迷埃” “怎么了酸舍?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長里初。 經(jīng)常有香客問我啃勉,道長,這世上最難降的妖魔是什么双妨? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任淮阐,我火速辦了婚禮叮阅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘枝嘶。我一直安慰自己帘饶,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布群扶。 她就那樣靜靜地躺著及刻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪竞阐。 梳的紋絲不亂的頭發(fā)上缴饭,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音骆莹,去河邊找鬼颗搂。 笑死,一個胖子當(dāng)著我的面吹牛幕垦,可吹牛的內(nèi)容都是我干的丢氢。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼先改,長吁一口氣:“原來是場噩夢啊……” “哼疚察!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起仇奶,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤貌嫡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后该溯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體岛抄,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年狈茉,在試婚紗的時候發(fā)現(xiàn)自己被綠了夫椭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡氯庆,死狀恐怖蹭秋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情点晴,我是刑警寧澤感凤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站粒督,受9級特大地震影響陪竿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一族跛、第九天 我趴在偏房一處隱蔽的房頂上張望闰挡。 院中可真熱鬧,春花似錦礁哄、人聲如沸长酗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夺脾。三九已至,卻和暖如春茉继,著一層夾襖步出監(jiān)牢的瞬間咧叭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工烁竭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留菲茬,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓派撕,卻偏偏與公主長得像婉弹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子终吼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容