2012-08-11 62 views
11

有沒有一種方法讓UITextField成爲沒有動畫鍵盤的第一響應者?也就是說,讓鍵盤剛出現?成爲第一個沒有動畫的響應者

基本上,我推着第二UIViewController在具有UITextFieldUIViewController,並且當第二視圖控制器被彈出堆棧,我希望UITextField立即擁有第一個響應狀態,以便當第二視圖控制器彈出,用戶從不會注意到文本字段不是第一響應者。

現在我擁有它,當它彈出時,鍵盤會在屏幕上產生動畫,但我不想讓它看到。

任何想法?

回答

14

您可以使用一個UIView動畫像這樣

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.0]; 
[UIView setAnimationDelay:0.0]; 
[UIView setAnimationCurve:UIViewAnimationCurveLinear]; 

[textField becomeFirstResponder]; // <---- Only edit this line 

[UIView commitAnimations]; 

這將導致鍵盤突然出現。

你可以做相同的,但與-resignFirstResponder

雨燕..

UIView.beginAnimations(nil, context: nil) 
    UIView.setAnimationDuration(0.0) 
    UIView.setAnimationDelay(0.0) 
    someTextView.resignFirstResponder() 
    UIView.commitAnimations() 
+0

等什麼是UIView?就像'self.view',或者是'UITextField'?另外,我應該把它放在'viewWillAppear'中嗎? – 2012-08-11 20:06:10

+0

UIView引用類。唯一需要更改的部分是'textField'。這應該是UITextField的名稱,你想做的第一個應答器 – 2012-08-11 20:07:17

+0

嗯,我做到了,但沒有改變...我認爲的事情是,具有文本字段的視圖控制器已經加載。當視圖被創建時,它會立即出現,但是當我從堆棧中的另一個控制器彈出回到這個視圖控制器時,它已經被加載了,所以這種情況永遠不會發生。我把這段代碼放在'viewWillAppear'中。我該怎麼辦? – 2012-08-11 20:17:38

1

只需設置它作爲第一個響應者在-viewDidAppear,使用戶不會注意到失去領域的地位。

-(void)viewWillAppear:(BOOL)animated { 
    if ([self isViewLoaded] && self.textField) 
     [self.textField becomeFirstResponder]; 
     [super viewWillAppear:animated]; 
} 

我已經使用這個代碼把一個簡短的樣本項目多達上dropbox,如果你喜歡它。

+0

你忘了打電話給'[super viewWillAppear:animated]' - 可能會引起你一些問題。也稱爲「自我」。view'來檢查它是否存在於視圖控制器上會觸發視圖創建,最好使用'[self isViewLoaded]'。最後,在這種特殊情況下,你在'viewWillAppear'方法內的事實表明已經創建了這個視圖 – 2012-08-11 20:07:29

+0

沒關係,忘記我的基本iOS。另外,self.view檢查並不會強制創建視圖(現在就進行測試),因爲當視圖控制器的視圖爲零時調用-loadView,這正是我首先要檢查的。 – CodaFi 2012-08-11 20:20:49

0

我,MOT知道什麼IOS版本你使用或在什麼時候你叫becomeFirstResponder 撥打viewWillAppear:對於iOS5的/ iOS6的[textFieldReference becomeFirstResponder]似乎工作只是你想要的方式運行:

它是在視圖控制器之前調用它將顯示它的視圖(即,如果您不手動處理視圖控制器層次結構),並且一旦出現在導航控制器鍵盤中,它已經呈現並且文本字段具有焦點。

這就是說,沒有公開的方式,我聽說過,將允許指定鍵盤外觀樣式。

+0

公共方式是@IVArray的答案中的UIView的核心動畫包裝。 – CodaFi 2012-08-11 20:17:20

+0

我使用的是iOS 5.0,但是當我嘗試這個時候沒有任何改變... – 2012-08-11 20:19:46

相關問題