【问题标题】:How to reset keyboard view from 'symbols' to 'alphabet' programmatically如何以编程方式将键盘视图从“符号”重置为“字母”
【发布时间】:2011-07-19 14:37:19
【问题描述】:

我有一个 UITextView,我正在监听一个 UIButton 事件来对这个 textView 中的文本采取行动:

- (IBAction)buttonClicked {
    NSString *text = myTextView.text;
    //Do some work with the text.
    myTextView.text = @""; //reset the textView.
}

我不希望将 textView 设置为 resignFirstResponder。我面临的问题是:当最后输入的字符是符号时,键盘卡在该视图上并且不会重置为默认键盘字母视图,消息传递应用程序和其他应用程序中的行为也是如此。如何在此方法中以编程方式重置键盘?

这可能是this question 的重复问题。但答案似乎对我不起作用。

这是公认的答案:

[editingField setKeyboardType:UIKeyboardTypeNumberPad];
[editingField reloadInputViews];

这是最后一条评论:

好的,显然将其声明为 UITextView 而不是 UIResponder 会影响它在运行时的行为方式。从字面上看,这是我所做的唯一更改,并且现在可以使用。谢谢。

但我似乎无法理解是什么小改动使它起作用,因为我仍在努力解决这个问题。

我已经尝试过resignFirstResponderbecomeFirstResponder,但是很快,后面的scrollableView没有根据keyboardWillShow事件设置。我也试过[textView setKeyboardAppearance:UIKeyboardAppearanceDefault],但还是没有变化。

是否有任何 API 方法可以执行此操作(例如键盘在单击“空格”时自动重置)?

【问题讨论】:

    标签: iphone objective-c uitextview


    【解决方案1】:

    我使用的一个技巧是使用隐藏的 textField 重新加载 inputView。

    代码:

    UITextField *hiddenTextField = [[UITextField alloc] init];
    [superView addSubview:hiddenTextField];
    
    [hiddenTextField becomeFirstResponder];
    [hiddenTextField reloadInputViews];
    [textView_ becomeFirstResponder];
    
    [hiddenTextField removeFromSuperview];
    [hiddenTextField release];
    

    【讨论】:

      【解决方案2】:

      我不使用临时文本字段。我只是 resignFirstResponder 并立即在 textview 上 becomeFirstResponder。如果两个调用一个接一个地立即完成,则不会出现键盘滑动动画。

      所以我的 buttonClicked 函数看起来像这样:

      - (IBAction)buttonClicked {
          NSString *text = myTextView.text;
          //Do some work with the text.
          myTextView.text = @""; //reset the textView.
      
          // Reset keyboard back to QWERTY side
          [myTextView resignFirstResponder];
          [myTextView becomeFirstResponder];
      }
      

      不幸的是,即使没有动画出现,键盘通知(例如UIKeyboardWillShowNotificationUIKeyboardWillHideNotification 等)仍然会被调用。我只是在resignFirstResponder 之前设置了一个标志,以通知我的键盘隐藏/显示通知回调以跳过执行。在我becomeFirstResponder 之后,我清除了那个标志,所以当键盘确实滑开时,通知回调可以正常执行。

      【讨论】:

        【解决方案3】:
        self.textField.keyboardType = UIKeyboardTypeAlphabet;
        [self.textField reloadInputViews];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-02-22
          • 1970-01-01
          • 1970-01-01
          • 2019-05-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多