2011-12-12 31 views
12

Tôi nhận được TextView được cho là hiển thị khi nhấn nút và cho phép người dùng nhập văn bản qua bàn phím.Sự cố khi quay trở thànhFirstResponder không hiển thị bàn phím cho một số người dùng

- (IBAction) changeName { 

    changeNameBtn.hidden = YES; 
    backBtn.hidden = YES; 

    usernameLabel.hidden = NO; 
    inputTextField.hidden = NO; 
    [inputTextField becomeFirstResponder]; // to show keyboard 
} 

Điều này làm việc tốt cho hầu hết chúng ta.

Nhưng Bàn phím không hiển thị cho một số người thử nghiệm của tôi, tại vị trí địa lý từ xa. Làm thế nào để rắc rối bắn này? Và những gì có thể là lý do cho các hành vi khác nhau của các thiết bị của chúng tôi? Nó hoạt động tốt cho tôi và mọi người khác. Tất cả chúng ta đều sử dụng cùng một thiết bị (iPod, iOS 4.1 - 5.1).

Điều đầu tiên tôi đã cố gắng đã không làm việc:

Tôi đoán rằng inputTextField đã làm trong một cách nào đó không trở thành có thể nhìn thấy trong thời gian, trước khi becomeFirstResponder đã bị sa thải, vì vậy tôi thêm setNeedsDisplay như tôi nghĩ rằng sẽ buộc một bản cập nhật .

[inputTextField setNeedsDisplay]; 
[inputTextField becomeFirstResponder]; 

Second điều tôi cố gắng không làm việc:

if([inputTextField canBecomeFirstResponder]){ 
    [inputTextField becomeFirstResponder]; 
} 

Thứ ba điều tôi cố gắng là một cách giải quyết, đòi hỏi người sử dụng không may mắn để nhấn trên sân:

- (IBAction) inputTextFieldTouch { 
    [inputTextField becomeFirstResponder]; 
} 

Cách giải quyết này hoạt động, nhưng phải có cách tốt hơn. Hãy khai sáng cho tôi về những gì tôi đang làm sai! :) Và làm thế nào để tiếp cận các vấn đề như thế này mà không thể tự sao chép nó?

Trả lời

9

Chế độ xem văn bản chưa hoàn thành được rút ra khi bạn cố gắng làm cho nó trở thành người trả lời đầu tiên.

Bạn có thể thử làm nổi bật giao diện và đặt trả lời đầu tiên trong khối hoàn thành.

[UIView animateWithDuration:0.0 animations:^{ 
    [view addSubview:textView]; 
} completion:^(BOOL finished){ 
    [textView becomeFirstResponder]; 
}]; 
0

Hãy thử để xem nếu bạn có thể hiển thị bàn phím đầu tiên:

if([inputTextField canBecomeFirstResponder]){ 
    [inputTextField becomeFirstResponder]; 
} 
26

tôi gọi becomeFirstResponder sau bởi dòng này:

[self.searchBar performSelector:@selector(becomeFirstResponder) 
        withObject:nil 
        afterDelay:0.1f]; 

Nó làm việc cho tôi. Hy vọng điều này giúp đỡ.

+0

thực sự hoạt động tốt hơn câu trả lời, được đánh dấu chính xác. –

+0

tốt hơn, như thế nào, Ilya? – JOG

4

Tính đến iOS8, gọi becomeFirstResponder trên UITextView không hiển thị bàn phím cho tôi trên giả lập iOS, nhưng nó trên thiết bị thực. Vì vậy, hãy chắc chắn để kiểm tra xem nó với một thiết bị thực tế. Điều này không xảy ra trên iOS7.

+8

Bạn đã nhấn Cmd + Shift + K để sử dụng bàn phím máy tính chưa? Điều đó cho thấy và ẩn bàn phím của Simulator cho tôi. – chedabob

+0

Tất cả người thử nghiệm của tôi đều sử dụng thiết bị thực tế, bao gồm cả những thiết bị mà bàn phím không hiển thị. Như câu hỏi nói, "Chúng ta đều sử dụng cùng một thiết bị (iPod, iOS 4.1 - 5.1)". – JOG

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