2012-05-23 74 views

Trả lời

19

trước hết, bạn tìm thấy những subview trong UISearchBar, sau đó tìm UITextField ở tiểu Xem sau đó thay đổi màu sắc

Hãy thử mã này: -

for(UIView *subView in searchBar.subviews){ 
      if([subView isKindOfClass:UITextField.class]){ 
       [(UITextField*)subView setTextColor:[UIColor blueColor]]; 
      } 
     } 

cho ios 5 +

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor blueColor]]; 
+0

Làm theo cách này có thể sẽ làm việc nhưng là vỡ trong trường hợp táo quyết định chơi với hệ thống phân cấp xem, vui lòng xem giải pháp của tôi dưới đây sử dụng giao thức xuất hiện. –

11

Tính đến iOS 5, đúng cách để làm điều này là sử dụng giao thức xuất hiện.

Ví dụ:

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor blueColor]]; 
+1

Câu trả lời hay. Cảm ơn – Nekto

2

Bạn có thể thiết lập các thuộc tính như vậy, gọi đây là trong điều khiển của bạn.

[[UITextField appearanceWhenContainedIn:[self class], nil] setDefaultTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor], NSFontAttributeName:[UIFont systemFontOfSize:14]}]; 

* lưu ý rằng điều này sẽ thay đổi tất cả UITextFields trong điều khiển của bạn

2

Bản gốc UISearchBar hệ thống phân cấp đã thay đổi kể từ khi bài gốc và UITextField không còn là một subview trực tiếp. Mã bên dưới không đưa ra giả định về phân cấp UISearchBar.

Điều này cũng hữu ích khi bạn không muốn thay đổi màu văn bản của thanh tìm kiếm trong toàn bộ ứng dụng (ví dụ: sử dụng appearanceWhenContainedIn).

/** 
* A recursive method which sets all UITextField text color within a view. 
* Makes no assumptions about the original view's hierarchy. 
*/ 
+(void) setAllTextFieldsWithin:(UIView*)view toColor:(UIColor*)color 
{ 
    for(UIView *subView in view.subviews) 
    { 
     if([subView isKindOfClass:UITextField.class]) 
     { 
      [(UITextField*)subView setTextColor:color]; 
     } 
     else 
     { 
      [self setAllTextFieldsWithin:subView toColor:color]; 
     } 
    } 
} 

Cách sử dụng:

[MyClass setAllTextFieldsWithin:self.mySearchBar toColor:[UIColor blueColor]]; 
Các vấn đề liên quan