2010-04-16 44 views
15

Tôi có hai trường văn bản email và mật khẩu. Đoạn mã sau hoạt động tốt khi các trường được trình bày trên một khung nhìn thông thường nhưng khi chúng ở trên một cửa sổ bật lên, thì resignFirstResponder không hoạt động (trở thành công trình củaFirstResponder). textFieldsShouldReturn được gọi cho cả hai trường. Bất kỳ ý tưởng nào nếu tôi thiếu điều gì đó? Cảm ơn!Văn bản cửa sổ bật lên iPad - từ chứcFirstResponder không loại bỏ bàn phím

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 

    if (theTextField == email) { 
     [password becomeFirstResponder]; 
     return NO; 
    } 

    [theTextField resignFirstResponder]; 
    return NO; 
} 
+3

Âm thanh như một lỗi. Tôi muốn đề xuất gửi báo cáo tại bugreport.apple.com. –

+2

Có cùng một vấn đề khi textFields đang ở chế độ xem phương thức với modalPresentationStyle = UIModalPresentationFormSheet –

+0

Tôi cũng đang gặp lỗi này. –

Trả lời

1

Tôi không quá chắc chắn về điều này, nhưng, vì tôi hiểu hệ thống phân cấp trả lời, từ chức sẽ chỉ hoạt động nếu bạn có một số người trả lời khác trả lời.

Trong chế độ xem thông thường, chính chế độ xem sẵn sàng. Trong cửa sổ bật lên, có thể bạn cần phải làm gì đó với lớp bật lên của mình (như thực hiện lại một số phương thức Responder) để làm việc này.

1

Tôi cũng gặp sự cố này. Nhưng tôi đã giải quyết vấn đề này bằng cách thực hiện một điều khiển khác, điều đó không có trong popover như firstResponder và sau đó đã từ bỏ nó từ đó. Nhưng tôi không có vấn đề gì với popover.

2

Như được mô tả trong this answer, bàn phím đôi khi sẽ vẫn còn trên màn hình khi khung nhìn được trình bày theo kiểu UIModalPresentationFormSheet.

17

Kiểm tra this câu hỏi:

Trọng disablesAutomaticKeyboardDismissal trở NO như sau cố định cùng một vấn đề của tôi. Bạn nên đặt mã này để điều khiển xem của bạn, từ đó bạn bắt đầu bàn phím:

- (BOOL)disablesAutomaticKeyboardDismissal { 
    return NO; 
} 
+1

Có một trường hợp đặc biệt. Nếu bộ điều khiển xem của bạn nằm bên trong một UINavigaitonController, bạn cần phải phân lớp UINavigationController và ghi đè lên phương thức đó. Xem http://stackoverflow.com/questions/3316700/dismiss-keyboard-on-ipad/14879832#14879832 để biết thêm thông tin. – Quentamia

0

Câu trả lời được cung cấp như một giải pháp khả thi cho người khác với một vấn đề tương tự, nhưng nơi các biện pháp thông thường không có tác dụng.

Nói tóm lại -

Tôi đã có một vấn đề tương tự (dưới một điều kiện nhất định) và cố gắng tất cả mọi thứ - không có kết quả - Bao gồm trong danh sách các giải pháp khả thi là [resignFirstResponder obj của], các trọng của 'disablesAutomaticKeyboardDismissal 'cho bộ điều khiển xem của tôi, [self.view endEditing: YES]; và một loạt những thứ khác.

Đã đi về việc xác định [id] của người trả lời đầu tiên hiện tại, chỉ để khám phá ra nó là số không. Khai thác 'Xong' trên bàn phím hoặc sử dụng bất kỳ phương pháp nào ở trên không làm gì cả - bàn phím vẫn còn - ngay cả sau khi nhấn vào trường nhập khác.

Màn hình cơ bản là một ViewController với một UITableView với một trường nhập văn bản trong mỗi ô - 7 hoặc 8 trong tổng số. Khai thác trên bất kỳ tế bào sẽ mang lại bàn phím như mong đợi và khai thác một nút 'Next' riêng biệt (để ẩn bàn phím cộng với chế biến khác) làm việc như mong đợi. Tuy nhiên, ở chế độ ngang, trường cuối cùng được bàn phím bao phủ yêu cầu bàn được cuộn để hiển thị như vậy.

Sau khi cuộn và nhấn vào trường nhập trước đó, bàn phím không thể bị loại bỏ - bất kể là gì. Công việc duy nhất xung quanh là di chuyển bảng trở lại dưới bàn phím, sau đó nhấn vào nút 'tiếp theo'. Nó không có ý nghĩa.

Hầu như tại thời điểm từ bỏ (và thực hiện giải pháp thay thế), giải pháp đã hoạt động là làm cho trường nhập trước đó là firstResponder (mặc dù nó đã có một con trỏ nhấp nháy) và sau đó từ bỏFirstResponder sau đó.

Vì vậy;

`- (void) {actionNext

[[m_arrInputFields objectAtIndex:7] becomeFirstResponder]; 
[[m_arrInputFields objectAtIndex:7] resignFirstResponder]; 

}`

khắc phục vấn đề - trong khi [m_arrInputFields objectAtIndex: #any chỉ số kháC#] không!

Sẽ thật tuyệt nếu có ai có thể cung cấp sự rõ ràng hoặc giải thích cho điều này - khác - tôi hy vọng nó sẽ tiết kiệm cho người khác một vài giờ làm việc!

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