UITextField
UITextField即文本框,可以输入文本.我们将学习它的使用
1. UITextField创建
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let textField = UITextField(frame: CGRect(x: 50, y: 50, width: 400, height: 40))
textField.borderStyle = .RoundedRect
textField.placeholder = "请输入姓名"
textField.textAlignment = .Left
self.view.addSubview(textField)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
我们创建一个圆角矩形的文本框,并设置了提示文本,运行程序
2. UITextField的边框样式
再Xcode中,按住ctrl ,鼠标左键点击UITextField,查看它的定义,可以看见边框样式的枚举
public enum UITextBorderStyle : Int {
case None : 无边框
case Line : 直线边框
case Bezel: 直线阴影边框
case RoundedRect: 圆角矩形边框
}
None:
Line:
Bezel:
RoundedRect:
3. UITextField的对齐方式
水平对齐方式:
textField.textAlignment = .Left // 左对齐
textField.textAlignment = .Center // 居中对齐
textField.textAlignment = .Right // 右对齐
垂直对齐方式:
textField.contentVerticalAlignment = .Center // 居中
textField.contentVerticalAlignment = .Top // 向上对齐
textField.contentVerticalAlignment = .Bottom // 向下对齐
textField.contentVerticalAlignment = .Fill
4. 其它文本样式
// 设置文本
textField.text = "邪恶枫叶"
// 设置文本颜色
textField.textColor = UIColor.cyanColor()
// 当文本过长时自动缩小文字以适应文本框
textField.adjustsFontSizeToFitWidth = true
// 设置最小可缩小字号
textField.minimumFontSize = 12
现在运行程序
5. 清除按钮
// 是否在开始输入的时候清除以前的文本
textField.clearsOnBeginEditing = true
// 清除按钮显示模式
textField.clearButtonMode = .Always // 一直显示
textField.clearButtonMode = .Never // 永远不显示
textField.clearButtonMode = .UnlessEditing // 输入完后才显示
textField.clearButtonMode = .WhileEditing // 输入的时候显示
我们将clearButtonMode设置为.Always ,运行程序
6. 背景
// 设置是否可输入
textField.enabled = false
// 设置背景图片
textField.background = UIImage(named: "BG")
// 设置不可编辑背景图片
textField.disabledBackground = UIImage(named: "disableBG")
// 设置背景颜色
textField.backgroundColor = UIColor.redColor()
7. 监听UITextField的事件
要监听UITextField的事件,我们需要设置代理
textField.delegate = self
然后当前UIViewController要实现UITextFieldDelegate
class ViewController: UIViewController, UITextFieldDelegate {
...
}
现在我们看看UITextFieldDelegate的定义
public protocol UITextFieldDelegate : NSObjectProtocol {
@available(iOS 2.0, *)
optional public func textFieldShouldBeginEditing(textField: UITextField) -> Bool // 开始输入前被调用,return false将不会输入文字
@available(iOS 2.0, *)
optional public func textFieldDidBeginEditing(textField: UITextField) // 开始输入时调用
@available(iOS 2.0, *)
optional public func textFieldShouldEndEditing(textField: UITextField) -> Bool // return true允许编辑停止并获得焦点,return false, 编辑不会停止
@available(iOS 2.0, *)
optional public func textFieldDidEndEditing(textField: UITextField) //
编辑结束时调用
@available(iOS 2.0, *)
optional public func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool // 修改选中选中文本, range为选中范围, return false, 将不会修改文本
@available(iOS 2.0, *)
optional public func textFieldShouldClear(textField: UITextField) -> Bool // 清除按钮被点击的时候调用,retun false将会忽略点击(即不会发通知)
@available(iOS 2.0, *)
optional public func textFieldShouldReturn(textField: UITextField) -> Bool // return键被点击的时候调用,return false将会忽略点击
}
现在我们看看返回键的样式
public enum UIReturnKeyType : Int {
case Default
case Go
case Google
case Join
case Next
case Route
case Search
case Send
case Yahoo
case Done
case EmergencyCall
@available(iOS 9.0, *)
case Continue
}
它只是显示了样式,具体的功能需要我们自己实现
// 返回键样式
textField.returnKeyType = .Done
// MARK: - UITextFieldDelegate
// MARK: 返回按钮点击事件
func textFieldShouldReturn(textField: UITextField) -> Bool {
print(textField.text)
return true
}
运行程序,我们在文本框中输入内容, 然后点击Done,会发现控制台会打出相应的文字
特别说明一下:
// MARK: - UITextFieldDelegate
// MARK: 返回按钮点击事件
和OC的 #pragma mark非常类似, 虽然本人对OC不怎么懂+_+!!
我们看看效果:
8. UITextField其它属性
public var leftView: UIView?
public var leftViewMode: UITextFieldViewMode
public var rightView: UIView? // e.g. bookmarks button
public var rightViewMode: UITextFieldViewMode
...
还有一堆, 不详述了, 有用的到的时候点开UITextField看看它的定义,试一试!
9. 完整代码
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let textField = UITextField(frame: CGRect(x: 50, y: 50, width: 300, height: 40))
// 设置边框
textField.borderStyle = .RoundedRect
// 设置提示文本
textField.placeholder = "请输入姓名"
// 设置水平对齐方式
textField.textAlignment = .Left
// 设置垂直对齐方式
textField.contentVerticalAlignment = .Center
// 设置文本
textField.text = "邪恶枫叶"
// 设置文本颜色
textField.textColor = UIColor.cyanColor()
// 当文本过长时自动缩小文字以适应文本框
textField.adjustsFontSizeToFitWidth = true
// 设置最小可缩小字号
textField.minimumFontSize = 12
// 是否在开始输入的时候清除以前的文本
textField.clearsOnBeginEditing = true
// 清除按钮显示模式
textField.clearButtonMode = .Always
// textField.clearButtonMode = .Never
// textField.clearButtonMode = .UnlessEditing
// textField.clearButtonMode = .WhileEditing
textField.enabled = true
textField.background = UIImage(named: "BG")
textField.disabledBackground = UIImage(named: "disableBG")
textField.backgroundColor = UIColor.redColor()
textField.delegate = self
// 返回键样式
textField.returnKeyType = .Done
self.view.addSubview(textField)
}
// MARK: - UITextFieldDelegate
// MARK: 返回按钮点击事件
func textFieldShouldReturn(textField: UITextField) -> Bool {
print(textField.text)
return true
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}