在UIKeyboard处于可见状态时是否可以更改UITextInputTraits?

时间:2010-01-28 16:50:16

标签: iphone keyboard textinput

我想在键盘正在使用时更改它的UITextInputTraits ....

我的理想代码看起来像这样:

- (IBAction)nameTextDidChange:(UITextField *)sender {
    if ([sender.text isEqualToString:@""]) {
        sender.returnKeyType = UIReturnKeyDone;
    } else {
        sender.returnKeyType = UIReturnKeySearch;
    }
}

所以......我为一个空字符串设置了一个不同的'Return'按钮,因为我做了一个包含一些文本的字符串。我上面发布的代码不起作用,键盘保留了它的原始文本输入特性。

任何人的想法,或者这是否永远不会起作用,无论我怎么努力?

干杯!

尼克。

感谢Deepak,这是我实际使用的代码:

if ([sender.text isEqualToString:@""]) {
    sender.returnKeyType = UIReturnKeyDone;

    [sender resignFirstResponder];
    [sender becomeFirstResponder];
} else if (sender.returnKeyType == UIReturnKeyDone) {

    NSString *cachedLetter = sender.text;

    sender.returnKeyType = UIReturnKeySearch;

    [sender resignFirstResponder];
    [sender becomeFirstResponder];

    sender.text = cachedLetter;
}

3 个答案:

答案 0 :(得分:5)

您可以通过在方法末尾添加以下行来完成此工作。

if ([textField.text isEqualToString:@""]) {
    textField.returnKeyType = UIReturnKeyDone;

    [textField resignFirstResponder];
    [textField becomeFirstResponder];
} else if (textField.returnKeyType == UIReturnKeyDone) {
    textField.returnKeyType = UIReturnKeySearch;

    [textField resignFirstResponder];
    [textField becomeFirstResponder];
}

这应该有效。

您基本上可以打开和关闭它,以便文本输入发生变化。第二个是确保只在需要时翻转。

答案 1 :(得分:4)

[textField reloadInputViews]似乎可以解决这个问题......

答案 2 :(得分:0)

resignFirstResponder / becomeFirstResponder& reloadInputViews有一些警告。请参阅stackoverflow.com/questions/5958427 / ....这些将键盘更改回其初始状态。因此,如果用户切换到其他键盘布局(数字,标点符号等)之一,则该状态将丢失。我从来没有找到一个好的解决方案。