2014-03-14 56 views
0

我正在重新加載我的表reloaddata旋轉設備在我的應用程序。如果一個UITextfield在旋轉和鍵盤打開之前關注,我希望它保持聚焦並且鍵盤保持打開狀態。 Reloaddata調用「textfieldshouldEndEditing」和「KeyboardshouldHide」通知,因此在旋轉時我的文本字段未被聚焦,並且鍵盤也被關閉。設備旋轉後重新對焦UItextfield

要做到這一點,我用下面的代碼:

[myTextfield performSelector:@selector(becomeFirstResponder) 
            withObject:nil 
            afterDelay:1.0f]; 

能正常工作和鍵盤旋轉設備後再次打開,但問題是,當我按下鍵盤隱藏按鈕(現在的鍵盤被關閉)然後旋轉設備,鍵盤仍然出現錯誤,因爲在旋轉設備之前,我將其關閉。

有人可以建議什麼是錯的,或者應該做些什麼來實現這一目標?謝謝

回答

0

所以你在旋轉之前,如果鍵盤是可見的,你就可以安排它在1秒內出現。 我想問題是,即使它被隱藏,你仍然安排鍵盤呈現。如果是這樣的話,你應該檢查一下鍵盤是前performSelector: withObject:afterDelay:

if ([myTextField isFirstResponder]) { 
    [myTextField resignFirstResponder]; 
    [myTextField performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:1.]; 
} 

可見雖然我真的不認爲performSelector: withObject:afterDelay:是這樣做的正確方法。您可能需要使用willRotateToInterfaceOrientation:duration:didRotateFromInterfaceOrientation:方法。您可以存儲參考textField或任何其他firstResponder(即如果你有多個textField S或textView S:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    if ([self.myTextFiled isFirstResponder]) { 
     self.toBeFirstResponderAfterInterfaceOrientationChange = self.myTextFiled; 
     [self.myTextFiled resignFirstResponder]; 
    } 
} 

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    if (self.toBeFirstResponderAfterInterfaceOrientationChange) { 
     [self.toBeFirstResponderAfterInterfaceOrientationChange becomeFirstResponder]; 
     self.toBeFirstResponderAfterInterfaceOrientationChange = nil; 
    } 
} 

- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    self.toBeFirstResponderAfterInterfaceOrientationChange = nil; 
} 
0

如何只使用這樣的布爾類變量:

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    hasKeyboardOpen = YES; 
} 

// your own method to hide keyboard you would call when user physically hide keyboard 
- (void)dismissKeyboard 
{ 
    [myTextField resignFirstResponder]; 

    hasKeyboardOpen = NO; 
} 

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    if(hasKeybaordOpen == YES) 
    { 
     [myTextfield performSelector:@selector(becomeFirstResponder) 
            withObject:nil 
            afterDelay:1.0f]; 
    } 
}