textFiled解析

UITextField屬性和方法


//    快捷鍵:command +k 彈起/收起模擬器上的鍵盤
    override func viewDidLoad() {
        super.viewDidLoad()
        
//        UITextField:UIControl:UIViewControl
//  ==================      UIView的屬性和方法====================
//       1. 創(chuàng)建UITextField對象
     let textField = UITextField.init(frame: CGRectMake(100, 100, 200, 50))
//        2.添加到界面
        self.view.addSubview(textField)
//        3.設置背景顏色
        textField.backgroundColor = UIColor.greenColor()
        
        
//        再創(chuàng)建一個UITextField對象
        let textField2 = UITextField.init(frame: CGRectMake(100, 200, 200, 50))
        //        2.添加到界面
        self.view.addSubview(textField2)
        //        3.設置背景顏色
        textField2.backgroundColor = UIColor.greenColor()
        
        
//        ==========textField的專有屬性和方法==================
//        (1)文字相關
//        1.text屬性
//        設置文本輸入框的內容
        textField.text = ""
//        拿到文本輸入框的內容
        print(textField.text)
        
//        2.文字顏色
        textField.textColor = UIColor.brownColor()
//        3.設置字體
       
        textField.font = UIFont.systemFontOfSize(20, weight: 10)
        
//        4.設置占位文字(在輸入框內容為空的時候會顯示出來) placeholder占位符
        textField.placeholder = "請輸入賬號"
        
//        5.文本的對齊方式(默認:左對齊)
         textField.textAlignment = .Left
        
//        6.秘文顯示(默認是false)
//        textField.secureTextEntry = true
        
//        (2)顯示相關
//        1.設置文本框的樣式
        textField.borderStyle = .RoundedRect
        
//        2.設置清除按鈕模式(清除按鈕實際是右視圖)
//        (前提是輸入框中有文字)
//        Always -> 一直顯示
//        Never ->從不顯示
//        WhileEditing ->當文本輸入框處于編輯狀態(tài)的時候才顯示
//        UnlessEditing -> 當文本輸入框處于非編輯狀態(tài)的時候才顯示
//        注:當文本輸入框中有光標的時候處于編輯狀態(tài)
        textField.clearButtonMode = .Always
        
//        3.左視圖
        let leftImageView = UIImageView.init(frame: CGRectMake(0, 0, 50, 50))
        leftImageView.image = UIImage.init(named: "luffy1")
//        設置左視圖
//        ******具有父類型的對象可以用于當子類型的對象的引用
        textField.leftView = leftImageView
//        設置左視圖的顯示模式(確定什么時候顯示新症,默認是從不顯上)
        textField.leftViewMode = .Always
        
        
//        4.右視圖
//        當右視圖顯示的時候推捐,清除按鈕不能顯示
//        let rightLabel = UILabel.init(frame: CGRectMake(0, 0, 40, 40))
//        rightLabel.text = "你好"
//        textField.rightView = rightLabel
//        textField.rightViewMode = .Always
   
//        (3)鍵盤相關
//          1.設置鍵盤上返回按鈕的樣式
        textField.returnKeyType = .Search
//          2.鍵盤樣式
        textField.keyboardType = .Default
        
//          3.設置自定義的鍵盤
//        自定義的鍵盤只有高度有效遍略。寬度是屏幕的寬度崇棠,他自己會計算
//        let inputView = UIView.init(frame: CGRectMake(0, 0, 0, 256))
//        inputView.backgroundColor = UIColor.redColor()
//        textField.inputView = inputView

        //   4.設置子鍵盤
        let accessoryView = UIView.init(frame: CGRectMake(0, 0, 0, 50))
        accessoryView.backgroundColor = UIColor.greenColor()
        textField.inputAccessoryView = accessoryView
    
//    (4)設置代理
//        textField ->委托
//        self ->代理

       textField.delegate = self //會自動調用的方法不需要你寫調用只需要創(chuàng)建好對象就好了
        
        textField2.delegate = self
        
//        textField2.leftView = UIButton.init(frame: CGRectMake(0, 0, 40, 40))
//        textField2.leftView?.backgroundColor = UIColor.blackColor()
//        textField2.leftViewMode = .Always

    }
    
}

//MARK: - UITextField Delegate
extension ViewController: UITextFieldDelegate {

//    6.當按鍵盤上的返回按鈕的時候末捣,會自動調用
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        print("返回按鈕被點擊")
//        收起鍵盤(結束編輯)3種方式
//        1.放棄第一響應者
//        textField.resignFirstResponder()
//        2.直接讓指定的textField結束編輯
//        textField.endEditing(true)
//        3.讓shelf.view上的所有子視圖都結束編輯
        self.view.endEditing(true)
        
        return true
    }
    
    
    
    
    //5.當點擊textField彈出來的鍵盤上的按鈕的時候會自動調用這個方法
//    參數1:委托
//    參數2:當前輸入的字符所在的位置
//    參數3:當前輸入的字符串(在鍵盤上按的鍵的值)
//    返回值:是否可以改變texField的text屬性() false-> 按鈕鍵盤上的按鍵無效
    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
        
        print(range)
        print(string)
       
        if string >= "1" {
         print("進入秘密頁面")
        }
         return true
    }
    
    
//   2. 當文本輸入框已經開始編輯時會自動調用
    func textFieldDidBeginEditing(textField: UITextField) {
        print("已經開始編輯")
    }
    
//3.當文本輸入框將要結束編輯的時候會自動調用這個方法
//    返回:設置當前的textField是否可以結束編輯(默認是true)
    func textFieldShouldEndEditing(textField: UITextField) -> Bool {
         print("將要結束編輯")
        if textField.text?.characters.count >= 1 {
            return true
        }
        
       
        return false
    }
    
    
    
//    4.當前文本輸入框已經結束編輯的時候會自動調用這個方法
    func textFieldDidEndEditing(textField: UITextField) {
        print("已經結束編輯")
    }
    
//    在textField將要開始編輯的時候會自動調用
    //    參數1:當前這個協(xié)議對應的委托
//    返回值:設置當前的textField是否可以進行編輯(默認是true)
    func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
        print("將要開始編輯")
        return true //false ->讓textField不能進行編輯
        
    }
}

##自定義鍵盤

類:

```swift
import UIKit

// MARK:- YTKeyBoard協(xié)議
protocol YTKeyBoardDelegate {
    
//    讓代理去顯示指定的按鈕上的內容
    func showContent(button:UIButton)
}



// 1.在創(chuàng)建當前類的對象的時候坝辫,去創(chuàng)建這個視圖上所有的子視圖,并且添加(不需要設置子視圖的frame)

//計算子視圖的frame
class YTKeyBoard: UIView {

    //    代理
    var delegate: YTKeyBoardDelegate? = nil
//    重寫父類的構造方法
    override init(frame: CGRect) {
        super.init(frame: frame)
    
//  在這個構造方法去創(chuàng)建所有的子視圖
        self.creatSubviews()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

// MARK:-創(chuàng)建子視圖
extension YTKeyBoard {
    
//    計算子視圖的frame
//    1.這個方法第一次調用是在當前視圖將要顯示在界面上的時候才會調用(這個方法中拿到的當前視圖的frame是視圖最終的frame值)
//    當當前視圖顯示出來之后汹粤,若果視圖frame發(fā)生改變命斧,就會自動調用這個方法
    override func layoutSubviews() {
        super.layoutSubviews()
//      間距
        let margin:CGFloat = 10
//      寬度
        let keyW = self.frame.size.width
//        高度
        let keyH  = self.frame.size.height
        //        列數
        let col:CGFloat = 3
//        按鍵的寬度
        let btnW = (keyW - (col + 1) * margin) / col
//      行數
        let line:CGFloat = 4
        //        按鍵的高度
        let btnH = (keyH - (line + 1) * margin) / line
        
        
//        Y: margin+(btnH+margin)*(i/col)
//        X: margin+(btnW+margin)*(i%col)
//        拿到當前視圖上的所有的子視圖
        var i = 0
        for value in self.subviews {
            
//            找到按鍵對應的按鈕
            if value.tag == 100 {
                let btnX = margin + (margin + btnW) * CGFloat(i%Int(col))
                let btnY = margin + (margin + btnH) * CGFloat(i/Int(col))
                
                value.frame = CGRectMake(btnX, btnY, btnW, btnH)
//                找到一個按鈕i+1
                i += 1
            }
            
            
//            計算imageView 的frame
            if value.tag == 200 {
                value.frame = CGRectMake(20, -40, 50, 50)
            }
            
        }
        
        
      
    }
    
    
//    創(chuàng)建子視圖
    func creatSubviews() {
//        鍵盤上顯示的內容
        let titles = ["1","2","3","4","5","6","7","8","9","C","0","返回"]
        
        
//        便歷數組,創(chuàng)建對應的按鈕
        
        for (_,value) in titles.enumerate() {
            
//            創(chuàng)建對應的按鈕
            let btn = UIButton.init()
            btn.setTitle(value, forState: .Normal)
           
            btn.backgroundColor = UIColor.greenColor()
            btn.tag = 100
            btn.addTarget(self, action: "btnAction:", forControlEvents: .TouchDown)
            self.addSubview(btn)
        }
        
//        3.創(chuàng)建一個imageView
        let imageView = UIImageView.init()
        imageView.image = UIImage.init(named: "luffy1")
        imageView.tag = 200
        self.addSubview(imageView)
        
    }
    
    func btnAction(btn: UIButton) {
        
//        想要將按鈕上的內容顯示到ViewController中的textField上但是YTKryBoard是做不到的但是VieweController可以做到
        
//        確定三要素
//        委托:YTKeyBoard
//        協(xié)議:將指定按鍵上的內容顯示在textField
//        代理:ViewContoller
        
        
        
//        currentTitle屬性->按鈕上的文字
        print(btn.currentTitle)
        
//        讓代理去顯示按鈕上的內容
        self.delegate?.showContent(btn)
        
    }
    
}

class ViewController: UIViewController,YTKeyBoardDelegate {

    var textField = UITextField()
    override func viewDidLoad() {
        super.viewDidLoad()
     
       
//        1.創(chuàng)建一個UITextField對象
         textField = UITextField.init(frame: CGRectMake(100, 100, 200, 50))
        textField.backgroundColor = UIColor.yellowColor()
        self.view.addSubview(textField)
        
        
//        使用自己的鍵盤
        let keyBoard = YTKeyBoard(frame: CGRectMake( 0,0,100,256))
        keyBoard.backgroundColor = UIColor.redColor()
        textField.inputView = keyBoard
        
        keyBoard.delegate = self
        
        
    }

// MARK: - YTKeyBoard delegate
    func showContent(button: UIButton) {
        
        if button.currentTitle == "返回" {
//            收起鍵盤
            self.textField.resignFirstResponder()
            return
        }
        
//        判斷textField中的文字是否為空嘱兼,不為空才做刪除操作
        if button.currentTitle == "C" {
//
            if self.textField.text?.characters.count > 0 {
//           拿到最后一個字符的Index
                let last = self.textField.text?.endIndex.predecessor()
//                移除最后一個字符
                var text = self.textField.text!
                text.removeAtIndex(last!)
                self.textField.text = text
            }
            return
        }
        textField.text! += button.currentTitle!
    }

}


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末国葬,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌汇四,老刑警劉巖接奈,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異船殉,居然都是意外死亡鲫趁,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門利虫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挨厚,“玉大人,你說我怎么就攤上這事糠惫∫咛辏” “怎么了彼宠?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵稽物,是天一觀的道長。 經常有香客問我立叛,道長固阁,這世上最難降的妖魔是什么壤躲? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮备燃,結果婚禮上碉克,老公的妹妹穿的比我還像新娘。我一直安慰自己并齐,他們只是感情好漏麦,可當我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著况褪,像睡著了一般撕贞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上测垛,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天捏膨,我揣著相機與錄音,去河邊找鬼赐纱。 笑死脊奋,一個胖子當著我的面吹牛,可吹牛的內容都是我干的疙描。 我是一名探鬼主播,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼讶隐,長吁一口氣:“原來是場噩夢啊……” “哼起胰!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤效五,失蹤者是張志新(化名)和其女友劉穎地消,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體畏妖,經...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡脉执,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了戒劫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片半夷。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖迅细,靈堂內的尸體忽然破棺而出巫橄,到底是詐尸還是另有隱情,我是刑警寧澤茵典,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布湘换,位于F島的核電站,受9級特大地震影響统阿,放射性物質發(fā)生泄漏彩倚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一扶平、第九天 我趴在偏房一處隱蔽的房頂上張望帆离。 院中可真熱鬧,春花似錦蜻直、人聲如沸盯质。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呼巷。三九已至,卻和暖如春赎瑰,著一層夾襖步出監(jiān)牢的瞬間王悍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工餐曼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留压储,地道東北人。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓源譬,卻偏偏與公主長得像集惋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子踩娘,可洞房花燭夜當晚...
    茶點故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內容