2010-07-18 43 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中取消註冊。 [而且我不確定是否這兩種取消註冊是必要的。]