目标c,在一个动画中重新定位键盘上方的视图

时间:2014-12-30 07:26:34

标签: objective-c keyboard uitextview inputaccessoryview

我的屏幕底部有一个自定义视图,我想在打开时将其重新定位在键盘上方。

我知道我可以注册' KeyboardWasShown '通知,然后重新定位视图,或者苹果文档建议使用 scrollview scrollRectToVisible ,但我对这两个选项的问题是它不是作为键盘动画的一部分完成的。 我可以看到键盘出现,只有一秒钟后视图重新定位或滚动查看。

我尝试的另一个选项是将此视图设置为textView im编辑的InputAccessory,这非常有效,但键盘关闭后我的视图将不可见,我需要它始终可用。

我想我可以创建这个视图的两个实例,并且有一个作为inputAccessory,另一个只是坐在底部,但我真的不喜欢这个解决方案,这些视图的状态必须在两个实例之间同步

有人可以建议替代解决方案吗?

1 个答案:

答案 0 :(得分:0)

您最好使用UIKeyboardWillChangeFrameNotification通知。

首先添加观察者。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardFrameChange:) name:UIKeyboardWillChangeFrameNotification object:nil];

选择器将是......

- (void)keyboardFrameChange:(NSNotification *)notification {
    CGRect begin        = [[notification.userInfo valueForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
    CGRect end          = [[notification.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    CGFloat keyboardSize= begin.size.height;
    BOOL isShowing      = begin.origin.y > end.origin.y;

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:[notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]];
    [UIView setAnimationCurve:[notification.userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue]];
    [UIView setAnimationBeginsFromCurrentState:YES];

    // do view animation here.

    [UIView commitAnimations];
}

视图和键盘的动画将同步。