Với sự ra đời của bàn phím tùy chỉnh trong iOS, vấn đề này trở nên phức tạp hơn.
Tóm lại, UIKeyboardWillShowNotification có thể được gọi nhiều lần bằng cách triển khai bàn phím tùy chỉnh:
- Khi bàn phím hệ thống của Apple được mở (ở chế độ dọc )
- UIKeyboardWillShowNotification được gửi với chiều cao bàn phím là 224
- Khi bàn phím Swype được mở (ở chế độ dọc ):
- UIKeyboardWillShowNotification được gửi với độ cao bàn phím là 0
- UIKeyboardWillShowNotification được gửi với chiều cao bàn phím là 216
- UIKeyboardWillShowNotification được gửi với chiều cao bàn phím là 256
- Khi bàn phím SwiftKey được mở (ở chế độ dọc ):
- UIKeyboardWillShowNotification được gửi với độ cao bàn phím là 0
- UIKeyboardWillShowNotification được gửi với chiều cao bàn phím là 216
- UIKeyboardWillShowNotification được gửi với chiều cao bàn phím là 259
Để xử lý các tình huống này đúng cách trong một dòng mã, bạn cần:
Đăng ký nhà quan sát so với UIKeyboardWillShowNotification và UIKeyboardWillHideNotification thông báo:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
Tạo một biến toàn cục để theo dõi chiều cao bàn phím hiện tại:
CGFloat _currentKeyboardHeight = 0.0f;
Triển khai keyboardWillShow để phản ứng với sự thay đổi hiện tại về chiều cao bàn phím:
- (void)keyboardWillShow:(NSNotification*)notification {
NSDictionary *info = [notification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
CGFloat deltaHeight = kbSize.height - _currentKeyboardHeight;
_currentKeyboardHeight = kbSize.height;
}
LƯU Ý: Bạn có thể muốn tạo hoạt ảnh cho việc bù trừ các chế độ xem. Các thông tin từ điển chứa một giá trị keyed bởi UIKeyboardAnimationDurationUserInfoKey . Giá trị này có thể được sử dụng để tạo hoạt ảnh cho các thay đổi của bạn ở cùng tốc độ khi bàn phím được hiển thị.
Triển khai keyboardWillHide to the reset _currentKeyboardHeight và phản ứng với việc bàn phím bị loại bỏ:
- (void)keyboardWillHide:(NSNotification*)notification {
NSDictionary *info = [notification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
_currentKeyboardHeight = 0.0f;
}
keyboardFrameBeginRect
sang tọa độ địa phương.