NSNotificationCenter

问题描述:

现在我正试图编写一个函数来在屏幕上出现键盘时向上移动框架。 我开始使用NSNNotificationCenter。我的代码正在工作,但不正确。当键盘出现时,我的formView正在向上移动,但是当我开始编辑formView中的下一个textField时,formView再次向上移动。我的代码有什么问题? 谢谢。NSNotificationCenter

- (void)keyboardWillShow:(NSNotification *) aNotification { 
    NSDictionary *userInfo = [aNotification userInfo]; 

    CGRect frame = self.formView.frame; 
    frame.origin.y -= 170; 

    NSValue *animationDurationValue = [userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey]; 
    NSTimeInterval animationDuration; 

    [animationDurationValue getValue:&animationDuration]; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:animationDuration]; 

    formView.frame = frame; 

    [UIView commitAnimations]; 

} 
+2

你不应该在代码中硬编码170。你应该阅读文档,它会告诉你如何获得真正的键盘大小。在带有iPad的iOS 5上,键盘可以拆分,所以不应该调整框架。这只是一个例子。从不硬编码这样的东西。 – 2012-04-04 09:38:07

+0

好的,谢谢你的评论。 – nikigx2 2012-04-04 09:41:38

你应该再添加170个像素(或任何你计算由麦克的建议)到您的视图的origin.y当键盘正在消失。当您单击另一个文本字段时,技术上当前键盘将消失(您的视图不会以任何方式作出反应),并且会出现一个新的键盘(您的keyboardWillShow将再次被调用,并且您再次将视图向上移动170 px)。