2011-11-10 23 views
9

tôi có một cái nhìn với thông báo bàn phím như keyboardWillShowkeyboardWillHidekeyboardWillShow gọi hai lần

Tất cả các mã xử lý với các thông báo tôi sử dụng được lấy từ mẫu mã của Apple "KeyboardAccessory"

Khi tôi lần đầu tiên nhập quan điểm này, tất cả mọi thứ hoạt động tốt.

Nhưng khi tôi quay trở lại quan điểm này từ subviews của nó, mỗi khi tôi gõ một nút nói rằng:

[myTextField becomeFirstResponder]; 

các keyboardWillShowkeyboardWillHide phương pháp này sẽ được gọi là hai lần mỗi lần.

Nó thực sự khó hiểu,

Có ai giúp tôi với điều này không?

thực sự đánh giá cao!

Trả lời

11

Bạn có thể muốn đăng mã của mình.

Nếu phương pháp của bạn đang được gọi là hai lần, rất có thể, bạn đang đăng ký tham gia thông báo bàn phím nhiều lần và không loại bỏ các quan sát viên khi bạn nghĩ rằng bạn đang có.

Thêm người quan sát của bạn trong chế độ xemWillAppear: và xóa người xem trong chế độ xemLàm mờ: và xem điều gì xảy ra.

+0

Cảm ơn! Tôi đột nhiên biết được vấn đề ở đâu! –

+0

Nhưng những gì về cho chúng tôi biết giải pháp cho vấn đề của bạn? Âm thanh như một cái gì đó khác của nó hơn là loại bỏ các quan sát viên từ bộ điều khiển xem của bạn –

+0

Trong trường hợp của tôi, tôi đã thực sự có người quan sát được thêm hai lần. Thanks ~ – James

6

Nó được gọi hai lần trên iOS 8 khi bàn phím tùy chỉnh, như SwiftKey đang được hiển thị.

Trong lần gọi đầu tiên, nó có thể chuẩn bị hiển thị, vì vậy, CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; sẽ có chiều cao chính của keybaord 0.

Cuộc gọi thứ hai sẽ có chiều cao bàn phím đúng, vì vậy nếu bạn cần phải điều chỉnh insets nội dung, bạn có thể kiểm tra rằng chiều cao của bàn phím trở lại là> 0 trước khi tính toán insets của bạn.

Ngoài ra, nó sẽ được gọi bất cứ khi nào người dùng thay đổi bàn phím.

+3

Tôi nhận được điều này với chính xác cùng một thông báo (địa chỉ đối tượng bằng nhau) và chiều cao bằng nhau, quá ... :-(Ngoài ra, tôi chỉ thêm người quan sát một lần trong viewDidLoad –

3

Đối với tôi, việc thay đổi inputAccessoryView sẽ kích hoạt một cuộc gọi khác keyboardWillShow vì chiều cao của chế độ xem phụ kiện đầu vào ảnh hưởng đến chiều cao tổng thể của bàn phím.