前言
看完前面4章的内容,基本对IOS开发有一些认识了,这章我们继续动手去实践一下,学习文本和键盘的相关知识,以及通过一个交互式的案例演示文本与键盘的使用。
系列文章:
UIKit继承结构

界面视图
在控件的Filter中找到Label、TextFiled和Textview,拖拽到StoryBoard,画出界面如下:
代码界面
TextFiled清理图标和文本类型:(Keyboard Type:是软键盘类型)
控件委托代理:
import UIKit
class ViewController: UIViewController,UITextFieldDelegate,UITextViewDelegate {
@IBOutlet weak var textField: UITextField!
@IBOutlet weak var pwd: UITextField!
@IBOutlet weak var textview: UITextView!
//声明周期——创建
override func viewDidLoad() {
super.viewDidLoad()
textField.returnKeyType=UIReturnKeyType.next;//设置软键盘Return类型为下一步
textField.delegate = self;//委托给ViewController代理
pwd.returnKeyType = UIReturnKeyType.done;//完成
pwd.delegate = self;
}}
软键盘Return类型:(显示中文,还得设置info.plist中Localization native development region 为 cn或china )
- UIReturnKeyDefault,
- UIReturnKeyGo,//去往
- UIReturnKeyGoogle,
- UIReturnKeyJoin,//加入
- UIReturnKeyNext,//下一步
- UIReturnKeyRoute,
- UIReturnKeySearch,//搜索
- UIReturnKeySend,//发送
- UIReturnKeyYahoo,
- UIReturnKeyDone,//完成
- UIReturnKeyEmergencyCall
- UIReturnKeyContinue NS_ENUM_AVAILABLE_IOS(9_0)
虚拟机软键盘
如果使用的Mac虚拟机默认是使用电脑实体键盘的,需要取消勾选Connect Hardware Keyboard 。
收起键盘
一般对单个的UITextField调用resignFirstResponder方法, 就可以使其失去第一响应者即收起软键盘了。
本案例实现点击空白处自动收起键盘:
重写ViewController的touchesBegan或touchesEnded方法调用View.endEditing(true):
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
view.endEditing(true)
}
TextField的软键盘Return事件处理:
我们先手打出textFieldShouldReturn方法。(该方法属于系统编辑器会自动提示)
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
NSLog("点击了FieldReturnKey");
return true;
}
练习题目:判断编辑框内容非空、文本框进行提示。
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
NSLog("点击了FieldReturnKey");
if(textField == self.textField && self.textField.returnKeyType == UIReturnKeyType.next){
if(self.textField.text == ""){
textview.text = "账户不能为空!";
}else{
self.textField.resignFirstResponder();
textview.text = "Next响应成功!";
pwd.becomeFirstResponder();
}
}else if textField == self.pwd && pwd.returnKeyType == UIReturnKeyType.done{
if self.textField.text == ""{
self.pwd.resignFirstResponder();
textview.text = "账户不能为空!";
self.textField.becomeFirstResponder();
}else if(textField.text == ""){
textview.text = "密码不能为空!";
} else{
textview.text = "恭喜你!响应成功!";
}
}
return true;
}
代码逻辑比较常见,很简单。但是,细心的朋友会留意几点:self.变量名 、if()。
这里要说一下:首先,我们在方法参数中声明的textFiled和我们声明的全局变量textFiled,它俩重名了。参数中的textFiled表示该类型的控件,所有我们要使用自己声明的需要借助委托代理self.textFiled指明,不重名的一般可以不用加,但是规范代码肯定还是要加self的。另外,if判断加不加()都一样。
运行结果
