南昌IOS培训
达内南昌中心

0571-56020830

热门课程

ios培训笔记--实操ReturnKey与TextField

  • 时间:2018-05-14
  • 发布:转载
  • 来源:网络

UIKit继承结构


我们通过这个UIKit继承结构图,我们试着找到本章要学习的TextFiled与TextView,去观察所属的继承关系。

界面视图

在控件的Filter中找到Label、TextFiled和Textview,拖拽到StoryBoard,画出界面如下:


代码界面

打开ViewController,在代码中实现UITextFieldDelegate和UITextViewDelegate委托协议。

将控件对象进行引用声明:(代码右边圆点拖拽到指定控件即可,细节操作上一章有讲到)


TextFiled清理图标和文本类型:(Keyboard Type:是软键盘类型)


控件委托代理:

[objc] view plain copyimport 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;

}}

[objc] view plain copyimport 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 。


收起键盘

TextFiled默认在编辑状态会调起软键盘,但是初次体验是无法自动收起键盘。那么就需要代码进行控制了。

一般对单个的UITextField调用resignFirstResponder方法, 就可以使其失去第一响应者即收起软键盘了。

本案例实现点击空白处自动收起键盘:

重写ViewController的touchesBegan或touchesEnded方法调用View.endEditing(true):

[objc] view plain copyoverride func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

view.endEditing(true)

}

[objc] view plain copyoverride func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

view.endEditing(true)

}

TextField的软键盘Return事件处理:

到这里,是小练习的最后也是最重要环节。

我们先手打出textFieldShouldReturn方法。(该方法属于系统编辑器会自动提示)

[objc] view plain copyfunc textFieldShouldReturn(_ textField: UITextField) -> Bool {

NSLog("点击了FieldReturnKey");

return true;

}

[objc] view plain copyfunc textFieldShouldReturn(_ textField: UITextField) -> Bool {

NSLog("点击了FieldReturnKey");

return true;

}

练习题目:判断编辑框内容非空、文本框进行提示。

[objc] view plain copyfunc 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;

}

[objc] view plain copyfunc 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判断加不加()都一样。

免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容

上一篇:ios培训课程--创建第一款iPhone应用程序
下一篇:ios培训笔记--Progress、Switch、Slider、Segmented、练习

ios培训笔记--实操ReturnKey与TextField

ios培训课程--创建第一款iPhone应用程序

iOS操作(action)和输出口(Outlet)

ios开发中的UI元素

选择城市和中心
贵州省

广西省

海南省