博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【ios】textField 运行状态以及两种关闭键盘的方式
阅读量:6984 次
发布时间:2019-06-27

本文共 2965 字,大约阅读时间需要 9 分钟。

运行阶段

当我们输入的时候,触发顺序为

  1. textFieldShouldBeginEditing
  2. textFieldDidBeginEditing

当我们按回车的时候

  1. textFieldShouldReturn
  2. textFieldShouldEndEditing
  3. textFieldDidEndEditing

然后我们在textFieldShouldReturn方法中写入代码

[self.myTextField endEditing];

就可以将键盘收起

关闭键盘的两种方式

endEditing vs resignFirstResponder

这两种有什么区别呢?

self.view.endEditing(true) is less efficient because it will cycle through the entire view hierarchy and makes sure anything that can be a firstRepsonder has resigned it.

endEditing会遍历整个视图,确保所有的能够重置为firstResponder的组件进行重置,效率会略低。

If you know which item is currently the responder, it is more efficient and better practice to call resignFirstResponder on it directly.

如果你知道当前的响应者是哪个元素,那么直接重置该元素会是非常高效的。

代码段

#import "ModalViewController.h"@interface ModalViewController () 
- (IBAction)cancelButton:(id)sender;- (IBAction)save:(id)sender;@property (weak, nonatomic) IBOutlet UITextField *myTextField;@end@implementation ModalViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.myTextField.delegate = self; }- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { NSLog(@"%@",[[NSString alloc] initWithCString:__FUNCTION__ encoding:NSASCIIStringEncoding]); return TRUE;}- (void)textFieldDidBeginEditing:(UITextField *)textField { NSLog(@"%@", [[NSString alloc] initWithCString:__FUNCTION__ encoding:NSASCIIStringEncoding]);}- (BOOL)textFieldShouldEndEditing:(UITextField *)textField { NSLog(@"%@", [[NSString alloc] initWithCString:__FUNCTION__ encoding:NSASCIIStringEncoding]); return TRUE;}- (void)textFieldDidEndEditing:(UITextField *)textField { NSLog(@"%@", [[NSString alloc] initWithCString:__FUNCTION__ encoding:NSASCIIStringEncoding]);}- (BOOL)textFieldShouldReturn:(UITextField *)textField { NSLog(@"%@",[[NSString alloc] initWithCString:__FUNCTION__ encoding:NSASCIIStringEncoding]); [self.myTextField endEditing:TRUE]; return TRUE;}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}/*#pragma mark - Navigation// In a storyboard-based application, you will often want to do a little preparation before navigation- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller.}*/- (IBAction)cancelButton:(id)sender { [self dismissViewControllerAnimated:TRUE completion:^{ NSLog(@"close2"); }];}- (IBAction)save:(id)sender { // NSURL *url = [NSURL URLWithString:@"https://baidu.com"]; // [[UIApplication sharedApplication] openURL:url]; // [[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://10086"]]; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://10086"] options:@{} completionHandler:^(BOOL success) { NSLog(@"sms success:%@",success ? @"YES": @"NO"); }]; }@end

转载地址:http://fmtpl.baihongyu.com/

你可能感兴趣的文章
简单的写一个发布订阅器
查看>>
重学前端-js的类型问题
查看>>
Function类型
查看>>
Python学习
查看>>
ES6之let和const
查看>>
关于跨域
查看>>
一个半路出家的前端工程师的2018 | 掘金年度征文
查看>>
Fork/Join 框架介绍
查看>>
5.6 前端开发日报
查看>>
面试官:聊一下你对MySQL索引实现原理?
查看>>
[译]Go如何优雅的处理异常
查看>>
数据格式校验
查看>>
Django搭建个人博客:上传头像图片
查看>>
Docker与自动化测试及其测试实践
查看>>
Java-集合的简单介绍
查看>>
分布式架构发展
查看>>
针对不同的系统的宏定义
查看>>
十分钟熟练Dockerfile指令
查看>>
ES6新特征总结与介绍——声明与表达式
查看>>
python3实现抓取网页资源的 N 种方法(内附200GPython学习资料)
查看>>