2012-08-11 25 views
11

Có cách nào để UITextField trở thành người trả lời đầu tiên mà không có hoạt ảnh của bàn phím không? Đó là, làm cho nó như vậy mà bàn phím chỉ xuất hiện?Trở thành người trả lời đầu tiên mà không có hình động

Về cơ bản, tôi đẩy một giây UIViewController qua UIViewController rằng có UITextField, và khi đó điều khiển xem thứ hai được popped ra khỏi stack, tôi muốn UITextField để ngay lập tức có tư cách trả lời đầu tiên để khi bộ điều khiển xem thứ hai được bật lên, người dùng không bao giờ nhận thấy trường văn bản không trả lời trước tiên.

Ngay bây giờ tôi có nó để khi nó xuất hiện, bàn phím làm động lên màn hình, nhưng tôi không muốn điều đó được nhìn thấy.

Bất kỳ ý tưởng nào?

Trả lời

14

Bạn có thể sử dụng một hình ảnh động UIView như vậy

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

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

[UIView commitAnimations]; 

này sẽ làm cho bàn phím để đột nhiên xuất hiện.

Bạn có thể làm tương tự nhưng với -resignFirstResponder

Swift ..

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

Chờ UIView là gì? Có phải cái gì đó giống như 'self.view', hay là' UITextField'? Ngoài ra, tôi chỉ nên đặt điều này trong 'viewWillAppear'? –

+0

UIView tham chiếu đến lớp học. Phần duy nhất bạn cần thay đổi là 'textField'. Đây sẽ là tên của UITextField bạn muốn làm cho firstResponder –

+0

Hm Tôi đã làm điều đó, nhưng không có gì thay đổi ... Tôi nghĩ rằng điều đó là bộ điều khiển xem với trường văn bản đã được tải. Khi xem được tạo ra, nó xuất hiện ngay lập tức như nó nên, nhưng khi tôi bật trở lại bộ điều khiển xem này từ bộ điều khiển khác trên ngăn xếp, nó đã được nạp để điều này không bao giờ xảy ra. Tôi đặt mã này trong 'viewWillAppear'. Tôi nên làm gì? –

1

Chỉ cần thiết lập nó như là trả lời đầu tiên trong -viewDidAppear để làm cho người dùng không bao giờ nhận thấy lĩnh vực này đã mất tình trạng của nó.

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

Tôi đã đặt một dự án mẫu ngắn lên trên dropbox bằng mã này nếu bạn muốn.

+0

Bạn quên gọi '[super viewWillAppear: animated]' - có thể khiến bạn gặp một số vấn đề trên đường. Cũng gọi là 'tự.view' để kiểm tra xem nó có tồn tại trên view controller hay không sẽ kích hoạt việc tạo view, tốt hơn nên sử dụng '[self isViewLoaded]'. Cuối cùng, trong trường hợp cụ thể này, thực tế là bạn đang ở trong phương thức 'viewWillAppear' cho biết khung nhìn đó đã được tạo ra –

+0

Không bao giờ, quên iOS cơ bản của tôi. Ngoài ra, các self.view kiểm tra không _not_ lực lượng tạo ra một view (thử nghiệm ngay bây giờ), bởi vì -loadView được gọi là khi xem View Controller là nil, đó là những gì tôi đang kiểm tra ở nơi đầu tiên. – CodaFi

0

tôi, mot chắc chắn những gì phiên bản iOS nào bạn sử dụng hoặc vào thời điểm những gì bạn gọi becomeFirstResponder Calling [textFieldReference becomeFirstResponder] trong viewWillAppear: cho iOS5/iOS6 dường như chỉ làm việc theo cách bạn muốn nó:

nó là được gọi ngay trước khi bộ điều khiển xem sẽ hiển thị chế độ xem (đó là nếu bạn không xử lý cấu trúc phân cấp bộ điều khiển xem theo cách thủ công) và ngay sau khi nó xuất hiện trong bàn phím điều khiển đã được trình bày và trường văn bản có tiêu điểm.

Điều đó nói rằng, không có cách nào công khai mà tôi nghe nói sẽ cho phép chỉ định kiểu dáng bàn phím.

+0

Cách công khai là trình bao bọc hoạt hình lõi của UIView như trong câu trả lời của @ NSArray. – CodaFi

+0

Tôi đang sử dụng iOS 5.0, mặc dù khi tôi thử cách này không có gì thay đổi ... –

Các vấn đề liên quan