看完前面4章的内容,基本对IOS开发有一些认识了,这章我们继续动手去实践一下,学习文本和键盘的相关知识,以及通过一个交互式的案例演示文本与键盘的使用。
系列文章:
IOS 初级开发入门教程(三)探究应用及视图的生命周期变化
IOS 初级开发入门教程(四)基础控件使用小练习
在控件的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 )
如果使用的Mac虚拟机默认是使用电脑实体键盘的,需要取消勾选Connect Hardware Keyboard 。
一般对单个的UITextField调用resignFirstResponder方法, 就可以使其失去第一响应者即收起软键盘了。
本案例实现点击空白处自动收起键盘:
重写ViewController的touchesBegan或touchesEnded方法调用View.endEditing(true):
override func touchesBegan(_ touches: Set, with event: UIEvent?) {
view.endEditing(true)
}
我们先手打出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判断加不加()都一样。