有沒有一種方法讓UITextField
成爲沒有動畫鍵盤的第一響應者?也就是說,讓鍵盤剛出現?成爲第一個沒有動畫的響應者
基本上,我推着第二UIViewController
在具有UITextField
的UIViewController
,並且當第二視圖控制器被彈出堆棧,我希望UITextField
立即擁有第一個響應狀態,以便當第二視圖控制器彈出,用戶從不會注意到文本字段不是第一響應者。
現在我擁有它,當它彈出時,鍵盤會在屏幕上產生動畫,但我不想讓它看到。
任何想法?
有沒有一種方法讓UITextField
成爲沒有動畫鍵盤的第一響應者?也就是說,讓鍵盤剛出現?成爲第一個沒有動畫的響應者
基本上,我推着第二UIViewController
在具有UITextField
的UIViewController
,並且當第二視圖控制器被彈出堆棧,我希望UITextField
立即擁有第一個響應狀態,以便當第二視圖控制器彈出,用戶從不會注意到文本字段不是第一響應者。
現在我擁有它,當它彈出時,鍵盤會在屏幕上產生動畫,但我不想讓它看到。
任何想法?
您可以使用一個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()
只需設置它作爲第一個響應者在-viewDidAppear
,使用戶不會注意到失去領域的地位。
-(void)viewWillAppear:(BOOL)animated {
if ([self isViewLoaded] && self.textField)
[self.textField becomeFirstResponder];
[super viewWillAppear:animated];
}
我已經使用這個代碼把一個簡短的樣本項目多達上dropbox,如果你喜歡它。
你忘了打電話給'[super viewWillAppear:animated]' - 可能會引起你一些問題。也稱爲「自我」。view'來檢查它是否存在於視圖控制器上會觸發視圖創建,最好使用'[self isViewLoaded]'。最後,在這種特殊情況下,你在'viewWillAppear'方法內的事實表明已經創建了這個視圖 – 2012-08-11 20:07:29
沒關係,忘記我的基本iOS。另外,self.view檢查並不會強制創建視圖(現在就進行測試),因爲當視圖控制器的視圖爲零時調用-loadView,這正是我首先要檢查的。 – CodaFi 2012-08-11 20:20:49
我,MOT知道什麼IOS版本你使用或在什麼時候你叫becomeFirstResponder
撥打viewWillAppear:
對於iOS5的/ iOS6的[textFieldReference becomeFirstResponder]
似乎工作只是你想要的方式運行:
它是在視圖控制器之前調用它將顯示它的視圖(即,如果您不手動處理視圖控制器層次結構),並且一旦出現在導航控制器鍵盤中,它已經呈現並且文本字段具有焦點。
這就是說,沒有公開的方式,我聽說過,將允許指定鍵盤外觀樣式。
公共方式是@IVArray的答案中的UIView的核心動畫包裝。 – CodaFi 2012-08-11 20:17:20
我使用的是iOS 5.0,但是當我嘗試這個時候沒有任何改變... – 2012-08-11 20:19:46
等什麼是UIView?就像'self.view',或者是'UITextField'?另外,我應該把它放在'viewWillAppear'中嗎? – 2012-08-11 20:06:10
UIView引用類。唯一需要更改的部分是'textField'。這應該是UITextField的名稱,你想做的第一個應答器 – 2012-08-11 20:07:17
嗯,我做到了,但沒有改變...我認爲的事情是,具有文本字段的視圖控制器已經加載。當視圖被創建時,它會立即出現,但是當我從堆棧中的另一個控制器彈出回到這個視圖控制器時,它已經被加載了,所以這種情況永遠不會發生。我把這段代碼放在'viewWillAppear'中。我該怎麼辦? – 2012-08-11 20:17:38