textFiled解析

UITextField属性和方法


//    快捷键:command +k 弹起/收起模拟器上的键盘
    override func viewDidLoad() {
        super.viewDidLoad()
        
//        UITextField:UIControl:UIViewControl
//  ==================      UIView的属性和方法====================
//       1. 创建UITextField对象
     let textField = UITextField.init(frame: CGRectMake(100, 100, 200, 50))
//        2.添加到界面
        self.view.addSubview(textField)
//        3.设置背景颜色
        textField.backgroundColor = UIColor.greenColor()
        
        
//        再创建一个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 ->当文本输入框处于编辑状态的时候才显示
//        UnlessEditing -> 当文本输入框处于非编辑状态的时候才显示
//        注:当文本输入框中有光标的时候处于编辑状态
        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 //会自动调用的方法不需要你写调用只需要创建好对象就好了
        
        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:当前这个协议对应的委托
//    返回值:设置当前的textField是否可以进行编辑(默认是true)
    func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
        print("将要开始编辑")
        return true //false ->让textField不能进行编辑
        
    }
}

##自定义键盘

类:

```swift
import UIKit

// MARK:- YTKeyBoard协议
protocol YTKeyBoardDelegate {
    
//    让代理去显示指定的按钮上的内容
    func showContent(button:UIButton)
}



// 1.在创建当前类的对象的时候,去创建这个视图上所有的子视图,并且添加(不需要设置子视图的frame)

//计算子视图的frame
class YTKeyBoard: UIView {

    //    代理
    var delegate: YTKeyBoardDelegate? = nil
//    重写父类的构造方法
    override init(frame: CGRect) {
        super.init(frame: frame)
    
//  在这个构造方法去创建所有的子视图
        self.creatSubviews()
    }

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

}

// MARK:-创建子视图
extension YTKeyBoard {
    
//    计算子视图的frame
//    1.这个方法第一次调用是在当前视图将要显示在界面上的时候才会调用(这个方法中拿到的当前视图的frame是视图最终的frame值)
//    当当前视图显示出来之后,若果视图frame发生改变,就会自动调用这个方法
    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)
            }
            
        }
        
        
      
    }
    
    
//    创建子视图
    func creatSubviews() {
//        键盘上显示的内容
        let titles = ["1","2","3","4","5","6","7","8","9","C","0","返回"]
        
        
//        便历数组,创建对应的按钮
        
        for (_,value) in titles.enumerate() {
            
//            创建对应的按钮
            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.创建一个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
//        协议:将指定按键上的内容显示在textField
//        代理:ViewContoller
        
        
        
//        currentTitle属性->按钮上的文字
        print(btn.currentTitle)
        
//        让代理去显示按钮上的内容
        self.delegate?.showContent(btn)
        
    }
    
}

class ViewController: UIViewController,YTKeyBoardDelegate {

    var textField = UITextField()
    override func viewDidLoad() {
        super.viewDidLoad()
     
       
//        1.创建一个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!
    }

}


你可能感兴趣的:(textFiled解析)