2011-10-20 5 views
15

Như nhiều người trong số các bạn đã biết iOS 5 đã giới thiệu bàn phím chia nhỏ gọn để gõ ngón tay cái. Thật không may, tôi có một số giao diện người dùng phụ thuộc vào bố cục bàn phím toàn màn hình thông thường. Một trong những bộ điều khiển xem của tôi trình bày cho người dùng một trang nhập văn bản và nếu họ nhấp vào một textField được bao phủ bởi bàn phím, nó sẽ trượt lên cùng với bàn phím. Hành động này là không cần thiết với bàn phím chia nhỏ.Kiểm tra bàn phím chia

Có cách nào để kiểm tra bố cục bàn phím nào đang được sử dụng trước khi bật lên không?

Cảm ơn!

+0

Sẽ đánh giá cao một bản cập nhật về cách giải quyết youve này! –

+0

tôi cố gắng trả lời về câu hỏi này trong [ở đây] [1] [1]: http://stackoverflow.com/a/17567217/887325 – Bimawa

Trả lời

17

Khi bàn phím được gắn đế, UIKeyboardWillShowNotification sẽ được nâng lên. Nếu bàn phím bị chia nhỏ hoặc bị khóa, không có thông báo bàn phím nào được nâng lên.

Nếu một bàn phím được cập cảng, UIKeyboardWillShowNotification sẽ được nâng lên, và sau đây sẽ là sự thật:

[[[notification userInfo] valueForKey:@"UIKeyboardFrameChangedByUserInteraction"] intValue] == 1 

Nếu một bàn phím được gắn, UIKeyboardWillHideNotification sẽ được nâng lên, và tuyên bố trên cũng sẽ là sự thật.

Sử dụng thông tin này đã đủ để tôi mã hóa giao diện người dùng của mình.

Lưu ý: điều này có thể vi phạm nguyên tắc của Apple, tôi không chắc chắn.

+0

giá trị cho 'UIKeyboardFrameChangedByUserInteraction'is không chính xác tại iOS7 – Daniel

1

Các thông báo được đăng khi bàn phím xuất hiện hoặc thay đổi vị trí của nó (UIKeyboardWillShowNotification, UIKeyboardWillChangeFrameNotification) chứa một từ điển userInfo với khung của bàn phím (UIKeyboardFrameEndUserInfoKey) cho phép bạn xác định vị trí các yếu tố giao diện người dùng của bạn một cách chính xác, tùy thuộc vào kích thước thực tế và vị trí của bàn phím.

5

UIKeyboardFrameChangedByUserInteraction phím không trả về 1 lần khi chia tách bàn phím.

Dưới đây là giá trị khóa từ điển thông tin người dùng đầy đủ trên UIKeyboardDidShowNotification/UIKeyboardDidHideNotification.

2012-07-11 11:52:44.701 Project[3856:707] keyboardDidShow: { 
    UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {1024, 352}}"; 
    UIKeyboardCenterBeginUserInfoKey = "NSPoint: {512, 944}"; 
    UIKeyboardCenterEndUserInfoKey = "NSPoint: {512, 592}"; 
    UIKeyboardFrameBeginUserInfoKey = "NSRect: {{-352, 0}, {352, 1024}}"; 
    UIKeyboardFrameChangedByUserInteraction = 0; 
    UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 0}, {352, 1024}}"; 
} 

2012-07-11 11:52:45.675 Project[3856:707] keyboardDidHide: { 
    UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {1024, 352}}"; 
    UIKeyboardCenterBeginUserInfoKey = "NSPoint: {512, 592}"; 
    UIKeyboardCenterEndUserInfoKey = "NSPoint: {512, 944}"; 
    UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 0}, {352, 1024}}"; 
    UIKeyboardFrameChangedByUserInteraction = 0; 
    UIKeyboardFrameEndUserInfoKey = "NSRect: {{-352, 0}, {352, 1024}}"; 
} 

Thay vào đó bạn có thể sử dụng UIKeyboardCenterBeginUserInfoKey hoặc UIKeyboardCenterEndUserInfoKey chìa khóa để nhận được thông báo khi chia tách bàn phím.

Hy vọng điều này sẽ hữu ích!

+5

_Đã làm việc cho tôi_ [Bàn phím chia tách iPad và (Thiếu thông báo)] (http://adevelopingstory.com/blog/2012/05/the-ipad-split-keyboard-and-missing-notifications.html), – Zeeshan

9

Đây là giải pháp mà làm việc với iPad bàn phím split (có nguồn gốc từ các blog liên kết trong comment Zeeshan của)

[[NSNotificationCenter defaultCenter] 
    addObserverForName:UIKeyboardDidChangeFrameNotification 
    object:nil 
    queue:[NSOperationQueue mainQueue] 
    usingBlock:^(NSNotification * notification) 
{ 
    CGRect keyboardEndFrame = 
    [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; 

    CGRect screenRect = [[UIScreen mainScreen] bounds]; 

    if (CGRectIntersectsRect(keyboardEndFrame, screenRect)) 
    { 
     // Keyboard is visible 
    } 
    else 
    { 
     // Keyboard is hidden 
    } 
}]; 
+1

Tuyệt vời , nhưng thay vì kiểm tra xem bàn phím có cắt khung hình của khung nhìn hiện tại hay không, chỉ cần kiểm tra xem nó có trên màn hình hay không: CGRect screenRect = [[UIScreen mainScreen] bounds]; if (CGRectIntersectsRect (keyboardEndFrame, screenRect)) ... –

+0

@MasonLee Cập nhật theo nhận xét của bạn. Cảm ơn! – Robert