IM在修改我的视图的文本字段时遇到更改返回键类型的问题。因此,当用户单击文本字段时,我有一些更改键盘返回类型的检查,这些检查放在- (void)textFieldDidBeginEditing:(UITextField *)textField
,当我在这里更改键盘返回键时,代码工作正常。我只是像[textField setReturnKeyType:UIReturnKeyDone];
那样改变键盘后退键。所以有2个文本域用户名和密码。如果两个文本域中的文本我想将返回键更改为完成,如果只有一个文本字段中的文本我想将其更改为 NEXT ,那么我可以在textfields.so之间来回跳转。现在我在- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
中放置一些检查和平衡。然而,放在textFieldDidBeginEditing
中的相同代码在此功能中不起作用。我已经阅读了一堆帖子,他们都说删除文本字段作为第一个响应者然后设置返回键并再次成为响应者,但这会混淆我在相应方法中的当前流量。我还读到我必须在设置返回键后调用[textfield reloadInputFields]
,但这又不起作用。你会认为苹果现在已经修复了这样的bug。无论如何,有人在这里有一些意见吗?
答案 0 :(得分:1)
尝试一下,让我知道
我根据您的需要制作了针对您的问题及其运行完美的演示,或者您可以按照
进行修改//这是从StoryBield创建的textField的编辑已更改操作事件
- (IBAction)txtEditingChanged:(UITextField *)sender
{
[sender resignFirstResponder];
[sender becomeFirstResponder];
}
//这是从StoryBield创建的textField的编辑结束动作事件
- (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];
}
}
//这是Next和Done Button事件,即UITextField Delegate
-(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 :(得分:1)
我必须实现一个添加标记逻辑,需要根据输入到UITextField中的文本来更改键盘返回键。找到如何更改返回键很容易,但是当我开始测试时,我注意到这个解决方案仅适用于iOS10,但不适用于iOS9。花了一些时间做了一些研究之后,我想出了这个解决方法,它不是最好的,但至少它有效。
if #available(iOS 10.0, *) {
textField.reloadInputViews()
} else {
textField.keyboardType = .numberPad
textField.reloadInputViews()
textField.keyboardType = .default
textField.reloadInputViews()
}