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];
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. –
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