2010-07-18 48 views
0

我有一个包含六个UITextField的视图的视图控制器。每当用户选择一个文本字段,我需要向上滚动事物。所以文本字段都将视图控制器设置为它们各自的代表。当委托方法触发时,它会调用滚动方法来滚动(如果键盘正在出现)或向下滚动(如果它正在消失)。滚动的方法是这样的:在文本字段之间切换时避免滚动

- (void) scroll: (CGFloat) distanceUp { 
    [UIView beginAnimations:@"Scroll" context:NULL]; 
     //move some stuff up by distanceUp, or down if distanceUp is negative. 
    [UIView commitAnimations]; 
} 

如果用户选择文本字段,输入一个值,然后点击键盘上的完成按钮,这工作正常。

问题出在用户直接从一个文本字段直接切换到另一个文本字段时。在这种情况下,发生的情况是视图向下跳,然后向上滚动。显然,我宁愿它只是保持原位。我该如何做到这一点?

+0

这似乎只是模拟器中的一个问题(我之前遇到过),您是否在设备上测试过? – vodkhang 2010-07-18 04:01:07

+0

你有没有考虑过使用scrollView作为父视图的一切需要滚动?您可以使用UIKeyboard-Notificatins而不是textFields委托来确定何时需要滚动。 – tonklon 2010-07-18 06:41:26

回答

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中取消注册。 [而且我不确定是否这两种取消注册是必要的。]