如何让键盘消失?

时间:2009-08-25 13:19:42

标签: iphone objective-c cocoa-touch keyboard

有没有办法让键盘在没有resignFirstResponder的情况下消失?我有一个UITextField,我希望它能够接受新文本并且仍然可以看到插入点(闪烁的光标)而屏幕上没有键盘。

当我执行[textField resignFirstResponder]时,我仍然可以通过附加textField.text插入文字,但我再也看不到插入点了。

有没有一种标准的方法可以让键盘动画出来,同时让我的textField保持第一响应者?

感谢。

2 个答案:

答案 0 :(得分:4)

找到这个问题的答案。虽然它不是标准的,并且像Dave说的那样,可能是应用审稿人的禁忌。使用此页面中的代码作为起点:

http://unsolicitedfeedback.com/2009/02/06/how-to-customize-uikeyboard-by-adding-subviews/

我在动画块中添加了。您可以使用标准外观动画关闭键盘视图,但是第一响应者将保留该状态。真的,键盘只是隐藏在屏幕外。

- (void)hideKeyboard 
{
  for (UIWindow *keyboardWindow in [[UIApplication sharedApplication] windows]) {

    // Now iterating over each subview of the available windows
    for (UIView *keyboard in [keyboardWindow subviews]) {

      // Check to see if the view we have referenced is UIKeyboard.
      // If so then we found the keyboard view that we were looking for.
      if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES) {

        // animate the keyboard moving
        CGContextRef context = UIGraphicsGetCurrentContext();
        [UIView beginAnimations:nil context:context];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
        [UIView setAnimationDuration:0.4];

        // remove the keyboard
        CGRect frame = keyboard.frame;
        // if (keyboard.frame.origin.x >= 0) {
        if (keyboard.frame.origin.y < 480) {
          // slide the keyboard onscreen
          //frame.origin.x = (keyboard.frame.origin.x - 320);

          // slide the keyboard onscreen
          frame.origin.y = (keyboard.frame.origin.y + 264);
          keyboard.frame = frame;
        }
        else {
          // slide the keyboard off to the side
          //frame.origin.x = (keyboard.frame.origin.x + 320);

          // slide the keyboard off
          frame.origin.y = (keyboard.frame.origin.y - 264);
          keyboard.frame = frame;
        }

        [UIView commitAnimations];
      }
    }
  }
}

我在代码中写道,将屏幕左侧和底部的键盘解除。我不知道你最终resignFirstResponder会发生什么,但是当你这样做时可能会重置键盘框架。

答案 1 :(得分:2)

如果有,那么iPhone API中没有记录。而且,你所要求的是没有意义的。您希望在UITextField中具有插入点。太好了。但你还想让键盘消失吗?那么关注焦点的文本域有什么意义呢?你打算如何在文本字段中输入数据?如果您想拥有自定义键盘,只需将其显示在键盘顶部即可。我想不出一个很好的理由,为什么你希望光标可见,但有某种数据输入机制。这会打破UI惯例,甚至可能会拒绝您的应用。