2012-06-16 28 views
12

Hủy Trong ứng dụng iOS5 iPhone của tôi, tôi đang thiết lập màu sắc thái khác nhau của thanh tìm kiếm sử dụng đoạn mã sau:iOS - Tùy biến nút của UISearchBar

searchBar.tintColor = UIColorMake(@"#EFEFEF"); 

RGB giá trị của #efefef là (239.239.239)
làm việc của nó khỏe. Nhưng khi nút hủy xuất hiện, văn bản "Hủy" không hiển thị. Tôi chỉ có thể tùy chỉnh nút hủy có văn bản màu đen và trắng trong suốt không?
có thể tùy chỉnh không?

+0

Tôi đã viết một câu trả lời cho kho thóc này đây : http://stackoverflow.com/questions/19206757/how-to-change-textcolor-of-cancel-button-of-uisearchbar-in-ios7. Chỉ cần sử dụng SHSearchBar mà không phải là một nỗi đau trong ass như UISearchBar. – blackjacx

Trả lời

5

Bạn có thể tìm kiếm UISearchBar subviews và xác định vị trí các nút hủy, nó là nguy hiểm để làm như vậy, kể từ khi nút có thể thay đổi Ví dụ bạn có thể thêm này trong thư mục viewWillAppear

- (void) viewWillAppear:(BOOL)animated 
{ 
    //show the cancel button in your search bar 
    searchBar.showsCancelButton = YES; 
    //Iterate the searchbar sub views 
    for (UIView *subView in searchBar.subviews) { 
     //Find the button 
     if([subView isKindOfClass:[UIButton class]]) 
     { 
      //Change its properties 
      UIButton *cancelButton = (UIButton *)[sb.subviews lastObject]; 
      cancelButton.titleLabel.text = @"Changed"; 
     } 
    } 
} 

Như tôi đã nói trước đây có thể thay đổi, nó là một hack để làm như vậy, bạn tốt hơn gắn bó với bản gốc, hoặc tạo thanh tìm kiếm của riêng bạn.

+1

trong ios 7 nó không tìm thấy bất kỳ subviews – NSCry

+0

Điều này là không nên và như của iOS 5 cách tốt hơn để xử lý này là với proxy xuất hiện như Marián Černý descibes trong câu trả lời của mình. –

4

Kể từ iOS5 bạn có thể chỉnh sửa Navigationbar, Toolbar, TabBar và một số chi tiết với mã này ...

NSDictionary *textTitleOptions = [NSDictionary dictionaryWithObjectsAndKeys: 
              [UIColor darkGrayColor], 
              UITextAttributeTextColor, 
              [UIColor whiteColor], 
              UITextAttributeTextShadowColor, nil]; 
[[UINavigationBar appearance] setTitleTextAttributes:textTitleOptions]; 

tôi đã không thử nghiệm nó với một thanh tìm kiếm, nhưng nó cũng làm việc tương tự.

+0

Không, không. Nếu bạn nhìn vào tài liệu xuất hiện cho thanh tìm kiếm, nó không cung cấp một trình xử lý rõ ràng để thay đổi các thuộc tính của nút tìm kiếm. – csotiriou

42

Bạn có thể tùy chỉnh nút Hủy trên iOS 5 bằng cách sử dụng proxy xuất hiện. Bạn cần thay đổi diện mạo UIBarButtonItem khi có trong UISearchBar. Ví dụ để thay đổi phông chữ tiêu đề của nút Cancel bạn có thể sử dụng:

NSDictionary *attributes = 
    [NSDictionary dictionaryWithObjectsAndKeys: 
    [UIColor whiteColor], UITextAttributeTextColor, 
    [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5], UITextAttributeTextShadowColor, 
    [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset, 
    [UIFont systemFontOfSize:12], UITextAttributeFont, 
    nil]; 
[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] 
    setTitleTextAttributes:attributes forState:UIControlStateNormal]; 
[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] 
    setTitleTextAttributes:attributes forState:UIControlStateHighlighted]; 
+5

NÀY phải là câu trả lời được chấp nhận. Nó không phải là hacky, nó rõ ràng, và nó hoạt động. Câu trả lời hiện đang được chấp nhận có thể phá vỡ bất cứ lúc nào. – csotiriou

+1

Điều này là rất tốt cho việc thay đổi văn bản trên nút, nhưng làm thế nào để bạn thay đổi nút chính nó? Ví dụ - thay đổi kích thước nút –

+1

Thật không may UISearchBar cũng chứa một nút Clear (vòng tròn màu xám với một x bên trong) vì vậy nếu bạn thay đổi hình nền của nút Cancel bằng cách sử dụng phương pháp này, nút Clear bị ảnh hưởng quá ... –

0

Phương pháp này làm việc trong iOS7

for (UIView *view in searchBar.subviews) 
    { 
     for (id subview in view.subviews) 
     { 
      if ([subview isKindOfClass:[UIButton class]]) 
      { 
       // customize cancel button 
       UIButton* cancelBtn = (UIButton*)subview; 
       [cancelBtn setEnabled:YES]; 
       break; 
      } 
     } 
    } 

Kiểm tra này https://stackoverflow.com/a/18150826/1767686

Các vấn đề liên quan