我有一个包含六个UITextField的视图的视图控制器。每当用户选择文本字段时,我都需要向上滚动。因此,文本字段都将视图控制器设置为各自的委托。当委托方法触发时,它会调用scroll方法向上滚动(如果键盘出现)或向下滚动(如果它正在消失)。滚动方法如下所示:
- (void) scroll: (CGFloat) distanceUp {
[UIView beginAnimations:@"Scroll" context:NULL];
//move some stuff up by distanceUp, or down if distanceUp is negative.
[UIView commitAnimations];
}
如果用户选择了一个文本字段,输入一个值,然后点击键盘上的DONE按钮,这样就可以了。
当用户直接从一个文本字段切换到另一个文本字段时,问题就出现了。在这种情况下,会发生的情况是视图向下跳跃,然后向上滚动。显然我更希望它保持不变。我该怎么做呢?
答案 0 :(得分:1)
根据评论者tonclon的建议,我所做的是使用UIKeyboard通知而不是文本字段代表。在viewDidLoad中,我有以下内容:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide) name:UIKeyboardWillHideNotification object:nil];
keyboardWillShow / hide方法调用向上/向下滚动。
我在viewDidUnload和dealloc中取消注册。 [而且我不确定这两种取消注册是否都是必要的。]