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!
}
}