2009-11-19 8 views
9

Khi bàn phím xuất hiện, tôi muốn thiết lập cáciPhone UISearchBar & keyboardAppearance

keyboardAppearance = UIKeyboardAppearanceAlert 

Tôi đã kiểm tra các tài liệu hướng dẫn và có vẻ như bạn chỉ có thể thay đổi keyboardType.

Điều này có thể được thực hiện mà không vi phạm bất kỳ API riêng tư nào của Apple không?

Trả lời

-2

bàn phímAppearance là thuộc tính của UITextInputTraitsProtocol, có nghĩa là thuộc tính được đặt thông qua đối tượng TextField. Tôi không biết bàn phím Alert là gì, từ SDK nó là một bàn phím phù hợp cho một cảnh báo.

dưới đây là cách bạn truy cập vào bất động sản:

UITextField *myTextField = [[UITextField alloc] init]; 
myTextField.keyboardAppearance = UIKeyboardAppearanceAlert; 

Bây giờ khi người dùng chạm vào trường văn bản và bàn phím xuất hiện, nó phải là những gì bạn muốn.

+1

Bạn đã bỏ lỡ thực tế rằng điều này đến từ UISearchBar chứ không phải UITextField. UIKeyboardAppearanceAlert có nền trong suốt, mà tôi muốn giữ nguyên trong suốt tất cả ứng dụng của mình. Điều này có thể đạt được như bạn đã chứng minh trên UITextFields, tuy nhiên UISearchBar cũng có một trường văn bản bên trong nó. Tôi muốn biết liệu có thể đặt giao diện bàn phím cho trường văn bản này hay không. –

+0

Tệ của tôi. Trong tài liệu, có vẻ như không có thuộc tính hoặc phương pháp để đặt độ trong suốt của bàn phím trên lớp UISearchBar. Bạn chỉ có thể đặt loại bàn phím. – Justin

27

này nên làm điều đó:

for(UIView *subView in searchBar.subviews) 
    if([subView isKindOfClass: [UITextField class]]) 
     [(UITextField *)subView setKeyboardAppearance: UIKeyboardAppearanceAlert]; 

không tìm thấy bất kỳ cách nào khác làm ...

+0

Tôi xác nhận: nó hoạt động: o) Tôi đã không tìm thấy bất kỳ cách nào khác để có được nó. Câu trả lời này phải được chấp nhận. – CedX

+0

Tôi đoán công trình này, nhưng tôi đã tìm thấy một giải pháp khác, đơn giản hơn ở đây: http://stackoverflow.com/questions/1594346/dynamically-changing-keyboard-type-for-a-uisearchbar – ecotax

+0

@ecotax: bạn đang liên kết một giải pháp về keyboardType (mặc định, ASCII, Numbers…), nhưng đây là về keyboardAppearance (ánh sáng, bóng tối) – auco

9

này không còn hoạt động trên iOS 7 vì xem hệ thống phân cấp UISearchBar đã thay đổi. UITextView giờ đây là chế độ xem phụ của chế độ xem con đầu tiên (ví dụ: trong khung searchBar.subviews[0].subviews).

Một cách chứng minh tương lai hơn để làm điều này là kiểm tra đệ quy toàn bộ hệ thống phân cấp, và để kiểm tra giao thức UITextInputTraits thay vì UITextField, vì đó là những gì thực sự khai báo phương thức. Một cách làm sạch sẽ là sử dụng các loại. Đầu tiên tạo một loại trên UISearchBar có thêm phương pháp này:

- (void) setKeyboardAppearence: (UIKeyboardAppearance) appearence { 
    [(id<UITextInputTraits>) [self firstSubviewConformingToProtocol: @protocol(UITextInputTraits)] setKeyboardAppearance: appearence]; 
} 

Sau đó thêm một thể loại trên UIView có thêm phương pháp này:

- (UIView *) firstSubviewConformingToProtocol: (Protocol *) pro { 
    for (UIView *sub in self.subviews) 
     if ([sub conformsToProtocol: pro]) 
      return sub; 

    for (UIView *sub in self.subviews) { 
     UIView *ret = [sub firstSubviewConformingToProtocol: pro]; 
     if (ret) 
      return ret; 
    } 

    return nil; 
} 

Bây giờ bạn có thể cài giao diện bàn phím trên thanh tìm kiếm ở cùng cách bạn một textfield:

[searchBar setKeyboardAppearence: UIKeyboardAppearanceDark]; 
+0

cảm ơn, rất hữu ích! Tôi nghĩ rằng có một lỗi nhỏ mặc dù: "[sub subviewConformingToProtocol: pro]" nên là "[sub firstSubviewConformingToProtocol: pro]" – auco

+0

@auco cảm ơn, sửa chữa điều đó! – stonemonk

35

cách tốt nhất mà tôi tìm thấy để làm điều này, nếu bạn muốn làm điều đó trong suốt ứng dụng của bạn, là sử dụng Xuất hiện trên UITextField. Đặt điều này trong AppDelegate của bạn khi khởi chạy.

[[UITextField appearance] setKeyboardAppearance:UIKeyboardAppearanceDark]; 
+0

Bí quyết dành cho tôi, cảm ơn! – Funkycochise

+0

Cách tốt hơn nhiều ngay bây giờ! Cảm ơn – iGranDav

+0

Thats đã làm điều đó cho tôi quá. Trên iOS7. Mặc dù ý tưởng danh mục, bên dưới, có vẻ tốt. –