如何在iOS中正确显示和隐藏键盘?

时间:2015-05-20 17:07:50

标签: ios objective-c user-interface uiscrollview

我知道他可能是重复的,但根据我的情况,我有具体的问题。

我必须在显示currently edited field时隐藏键盘(有时隐藏在键盘后面)。我用过自定义代码。在选择下一个文本字段或将scroll view作为容器时,它无法正常工作。我按照Apple的建议改变了我的代码(参见link)。

UIViewControllerVC)嵌入了UIScrollView。我的UITextFields位于scroll view内。我在header label中有VC

我的问题是: 1.键盘的建议元素隐藏已编辑的字段。我通过添加height的{​​{1}}来解决此问题。

  1. 当我隐藏键盘并且我位于header label顶部底部时,我会离开大scroll view。是否可以计算empty space而不显示offset
  2. 修改 我正在使用的代码如下:

    empty space

1 个答案:

答案 0 :(得分:0)

我这样做没有滚动视图

- (void)keyboardWillShow:(NSNotification*)aNotification
{
    NSDictionary* info = [aNotification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
    NSTimeInterval duration = [[info objectForKey: (UIKeyboardAnimationDurationUserInfoKey)] doubleValue];


    CGFloat keyboardTop = [[UIScreen mainScreen] bounds].size.height - kbSize.

    CGRect activeFieldFrameClone = activeField.frame;
    CGFloat activeFieldBottom = activeField.frame.origin.y + activeField.frame.size.height;
    if (activeFieldBottom > keyboardTop)
        activeFieldFrameClone.origin.y -= activeFieldBottom - keyboardTop + 30;
        // 30 is Just some offset valur


    [UIView animateWithDuration:duration animations:^{
        activeField.frame = activeFieldFrameClone;
    }];

}

基本上,通过检查字段底部是否显示低于键盘顶部来检查键盘是否隐藏活动字段。如果是这样,请将该字段向上移动。

- (void)keyboardWillBeHidden:(NSNotification*)aNotification上我会将它向下移动它所提升的价值。要做到这一点,可以设置一个全局变量来保存字段的原始帧,然后将其设置为字段new frame。

也许注册keyboardWillShow而不是

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillShow:)
                                                 name:UIKeyboardWillShowNotification object:nil];