iOS|iOS UITextField 无法输入最后一个字符
问题描述:
无法输入最后一个字符:比如 65443,再按一次2后,没有反应
问题代码
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSCharacterSet *charSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
NSString *filteredStr = [[string componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@""];
if ([string isEqualToString:filteredStr]) {
NSString *curStr = textField.text;
NSString *nextStr = curStr;
if([string isEqualToString:@""]){
nextStr = [curStr stringByReplacingCharactersInRange:range withString:string];
}else{
nextStr = [curStr stringByAppendingString:string];
}
NSString *verStr = nextStr;
if (verStr.length >= 6) {
[self.textView resignFirstResponder];
//这一行有问题
}
return YES;
}
return NO;
}
问题解决:
【iOS|iOS UITextField 无法输入最后一个字符】加一下延迟:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.textView resignFirstResponder];
//这一行有问题
});
问题分析:
1 textField只有在是FirstResponder的时候才可以使用键盘修改值
2 这个代理的作用是返回textField是否可以修改的range的值,当输入满6个字的时候会执行resignFirstResponder,这个时候虽然返回了YES,但是textField不是第一响应者也不会修改值
resignFirstResponder 加一下延迟,等返回YES后,textField修改了值再resignFirstResponder就可以了
推荐阅读
- 2020-04-07vue中Axios的封装和API接口的管理
- 解决SpringBoot引用别的模块无法注入的问题
- iOS中的Block
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片
- Android7.0|Android7.0 第三方应用无法访问私有库
- 无论你是谁,都有两件事,无法掌控
- 2019-08-29|2019-08-29 iOS13适配那点事
- Hacking|Hacking with iOS: SwiftUI Edition - SnowSeeker 项目(一)
- iOS面试题--基础
- 没有思考时