2015-11-02 68 views
2

IM在更改返回键类型时遇到问题,同时仍在编辑我的视图的文本字段。所以当用户点击文本框时,我有一些检查改变键盘的返回类型,这些检查被放置在- (void)textFieldDidBeginEditing:(UITextField *)textField,当我在这里更改键盘返回键代码工作正常。我只是改变键盘重新调整键像这样[textField setReturnKeyType:UIReturnKeyDone];。所以有2个文本框的用户名和密码。如果在这两个文本字段中的文本我想要将返回键更改为完成如果仅在其中一个文本字段中的文本我想将其更改为NEXT因此我可以在文本字段之间来回跳转。我在- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string中进行了一些制衡。然而,相同的代码im放在textFieldDidBeginEditing不在这个功能。我读了一堆帖子,他们都说,作为第一响应者删除文本字段,然后设置返回键,并再次成为响应者,但这会扰乱我的当前流程在各自的方法。我也读过,我必须在设置返回键后拨打[textfield reloadInputFields],但这又不起作用。你会认为苹果现在已经修复了这样的错误。无论如何,有人在这里有一些输入吗?在仍然编辑UITextField的同时更改返回键类型?

回答

1

试试吧,让我知道

我已经演示了你的问题,它运行完美,按您的需要或您可以修改它按照

//这是编辑而改变这两个文本框创建从故事板中操作事件

- (IBAction)txtEditingChanged:(UITextField *)sender 
{ 
    [sender resignFirstResponder]; 
    [sender becomeFirstResponder]; 
} 

//这是编辑难道Ë第二这两个文本框创建从故事板中操作事件

- (IBAction)txtEditingEnd:(UITextField *)sender 
{ 
    if (txtUserName.text.length == 0 || txtPassword.text.length == 0) 
    { 
     [txtUserName setReturnKeyType:UIReturnKeyNext]; 
     [txtPassword setReturnKeyType:UIReturnKeyNext]; 
    } 
    else 
    { 
     [txtUserName setReturnKeyType:UIReturnKeyDone]; 
     [txtPassword setReturnKeyType:UIReturnKeyDone]; 
    } 
} 

//这是下一个和完成按钮活动,即委托的UITextField

-(BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    if (textField == txtUserName && textField.returnKeyType == UIReturnKeyNext && textField.text.length != 0) 
    { 
     [txtPassword becomeFirstResponder]; 
    } 
    else if (textField == txtPassword && textField.returnKeyType == UIReturnKeyNext && textField.text.length != 0) 
    { 
     [txtUserName becomeFirstResponder]; 
    } 
    else 
    { 
     // This is your Done Button Event You Can Procced Here 
    } 
    return YES; 
} 
+1

谢谢,但生病在未来的版本中尝试它我工作,因为我也需要它 – Esko918

0

我不得不实施,需要一个附加标签逻辑根据输入到UITextField中的文本更改键盘返回键。找到如何更改返回键很容易,但是当我开始测试时,我注意到这个解决方案只适用于iOS10,但不适用于iOS9。花了一些时间并做了一些研究之后,我想出了这个解决方法,它不是最好的,但至少可以工作。

if #available(iOS 10.0, *) { 
    textField.reloadInputViews() 
} else { 
    textField.keyboardType = .numberPad 
    textField.reloadInputViews() 
    textField.keyboardType = .default 
    textField.reloadInputViews() 
} 
相关问题