我有4个uitextfields,可以识别它们是空的还是完整的。如果完成,则将其返回键类型更改为GO,否则为默认值。问题是键盘没有改变键类型,即使我使用reloadinputview
- (void)viewDidLoad
{
[super viewDidLoad];
_fieldsArray = @[_nameField, _passwordField, _emailField, _usernameField];
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSRange textFieldRange = NSMakeRange(0, [textField.text length]);
//NSLog(@"%d", !(NSEqualRanges(range, textFieldRange) && [string length] == 0));
[self signUpFieldsAreValid:(!(NSEqualRanges(range, textFieldRange) && [string length] == 0) && [self validateSignUpFields:textField])];
[textField reloadInputViews];
return YES;
}
- (BOOL)textFieldShouldClear:(UITextField *)textField{
[self signUpFieldsAreValid:NO];
[textField reloadInputViews];
return YES;
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
for (UITextField *aTextField in _fieldsArray) {
if (aTextField.isFirstResponder) {
aTextField.layer.borderWidth = 0.f;
aTextField.layer.borderColor = nil;
}
}
textField.layer.borderWidth = 1.f;
textField.layer.borderColor = [UIColor colorWithRed:200.f/255.f green:0.f/255.f blue:4.f/255.f alpha:1.f].CGColor;
return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
NSUInteger fieldIndex = [_fieldsArray indexOfObject:textField];
[_fieldsArray[(fieldIndex + 1) % 4] becomeFirstResponder];
return YES;
}
- (BOOL)validateSignUpFields:(UITextField *)firstResponder
{
for (UITextField *aTextField in _fieldsArray) {
if (!aTextField.text.length && ![aTextField isEqual:firstResponder]) {
return NO;
}
}
return YES;
}
- (void)signUpFieldsAreValid:(BOOL)valid
{
NSLog(@"%d", valid);
for (UITextField *aTextField in _fieldsArray) {
if (valid) {
aTextField.returnKeyType = UIReturnKeyGo;
}
else {
aTextField.returnKeyType = UIReturnKeyDefault;
}
}
}
答案 0 :(得分:14)
我在更改returnKeyType后使用了以下内容,它似乎在iOS7和iOS6.1中运行良好:
if ([self.textfieldOne isFirstResponder]) {
[self.textfieldOne reloadInputViews];
}
答案 1 :(得分:3)
试试这个。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
{
NSString *newStr=[textField.text stringByReplacingCharactersInRange:range withString:string];
if([newStr length] > 0)
{
textField.returnKeyType = UIReturnKeySearch;
}
else
{
textField.returnKeyType = UIReturnKeyDefault;
}
[textField resignFirstResponder];
[textField becomeFirstResponder];
return YES;
}
答案 2 :(得分:2)
根据文档,reloadInputViews
仅影响自定义输入视图,而不影响标准键盘。
我为解决此问题所做的工作是致电resignFirstResponder
,然后致电becomeFirstResponder
。这将在没有任何动画的情况下更新键盘:
而不是:
[textFiled reloadInputViews];
做的:
[textField resignFirstResponder];
[textField becomeFirstResponder];
答案 3 :(得分:1)
在 Swift 5 中
// Change returnKeyType based on textField text
func textFieldDidChangeSelection(_ textField: UITextField) {
// Change return key to Done when text entered
if textField.text != "" {
textField.returnKeyType = .done
textField.reloadInputViews()
}
// Change back to default style if all text removed
else {
textField.returnKeyType = .default
textField.reloadInputViews()
}
答案 4 :(得分:0)
我在更改returnKeyType后使用了以下内容,它似乎在iOS7和iOS6.1中运行良好:
if ([self.textfieldOne isFirstResponder]) {
[self.textfieldOne reloadInputViews];
}