【ios】textField 运行状态以及两种关闭键盘的方式

运行阶段

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

  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 () <UITextFieldDelegate>
- (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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值