2013-02-06 32 views
7

Tôi có một UISearchBar mà tôi đã thiết lập một UISearchBarIconClear tùy chỉnh cho UiControlStateNormal.tùy chỉnh UISearchBarIconClear cho UIControlStateHighlighted không hoạt động

[mySearchBar setImage:myImage forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal]; 

Phần này có tác dụng nhưng đáng tiếc là khi nhấn nút rõ ràng, nó thay đổi từ hình ảnh tôi đặt sang màu xám mặc định ban đầu.

Tôi đã thử đặt hình ảnh cho UIControlStateHighlighted, nhưng hình như không hoạt động.

Các documentation thực sự khẳng định

states hợp lệ là UIControlStateNormal và UIControlStateDisabled.

Điểm thiết lập nút tùy chỉnh cho trạng thái mặc định là gì nếu bạn không thể đặt cho trạng thái được đánh dấu? Tui bỏ lỡ điều gì vậy? Bất kỳ suy nghĩ hoặc giải pháp nào được đánh giá cao, cảm ơn!

+0

đối với tôi, điều này hoạt động hoàn hảo ... ngay cả trạng thái được đánh dấu ... – jimpic

Trả lời

0

Đến cùng một vấn đề sớm hơn một chút ngày hôm nay, đây là giải pháp thực sự xấu xí của tôi mà có lẽ tôi sẽ không sử dụng bản thân mình.

for(UIView *subView in searchBar.subviews) { 
    if([subView isKindOfClass: [UITextField class]]){ 
     UITextField *searchField = (UITextField *)subView; 
     CGFloat myWidth = 26.0f; 
     CGFloat myHeight = 30.0f; 
     UIButton *myButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, myWidth, myHeight)]; 
     [myButton setImage:[UIImage imageNamed:@"searchbariconclear"] forState:UIControlStateNormal]; 
     [myButton setImage:[UIImage imageNamed:@"searchbariconclear"] forState:UIControlStateHighlighted]; 

     [myButton addTarget:self action:@selector(clearsearchbar) forControlEvents:UIControlEventTouchUpInside]; 

     searchField.rightView = myButton; 
     searchField.rightViewMode = UITextFieldViewModeAlways; 
     searchField.clearButtonMode = UITextFieldViewModeNever; 
    } 
} 

Và sau đó ..

- (void)clearsearchbar { 
    for(UIView *subView in searchBar.subviews) { 
     if([subView isKindOfClass: [UITextField class]]){ 
      UITextField *searchField = (UITextField *)subView; 
      searchField.text = nil; 
     } 
    } 
} 

Ba vấn đề với cách tiếp cận này ..

  1. Vì chúng ta đang đào bới xung quanh bên trong subviews của thanh tìm kiếm nó có thể phá vỡ một ngày nào đó với cập nhật hệ điều hành.

  2. Điều này không hoạt động chính xác như UISearchBarIconClear, trong đó biểu tượng rõ ràng sẽ luôn hiển thị .. Bạn có khả năng thử kiểm tra với các UITextFieldViewModes khác bằng cách tiếp cận này, tôi không chủ yếu là vì, từ những gì tôi biết không những người khác sẽ là lý tưởng ở đây, vì một lý do nào đó hay lý do khác.

  3. Có lẽ đó chỉ là tôi, nhưng tôi không thực sự nghĩ rằng một cái gì đó giới thiệu hai vấn đề khi cố gắng giải quyết một, là một giải pháp. :-)

Nếu có ai có cách giải quyết tốt hơn vấn đề này, tôi cũng muốn nghe nó.

+0

Cảm ơn giải pháp. Tôi đã thực hiện một số công cụ hacky tương tự để thực hiện các sửa đổi khác cho trường văn bản cơ bản và kiểu dáng thanh tìm kiếm. Giải pháp này có vẻ như nó sẽ làm việc tốt nói chung, nhưng tôi rất có thể sẽ vượt qua nó bởi vì đây không phải là điều quan trọng để tôi thay đổi (như bạn đã nói, giải quyết vấn đề bằng cách tạo thêm 2). Điều đó nói rằng, bạn có thể làm cho hành vi này giống như nút rõ ràng thông thường bằng cách ẩn/hiển thị nút khi văn bản textfield thay đổi dựa trên việc liệu có bất kỳ điều gì trong trường hay không. – Dima

+0

@BenJackson: Wow! Cảm ơn câu hỏi thông minh đó trong một bình luận. Lý tưởng nhất, tôi sẽ nói, tôi sẽ đăng một giải pháp mà tôi sẽ không sử dụng bản thân mình, vì lý do tương tự, bạn sẽ hỏi những câu hỏi mà bạn yêu cầu. Câu trả lời cho câu hỏi đó sẽ là gì? –

2

Cách sử dụng proxy xuất hiện?

[[UIButton appearanceWhenContainedIn:[UITextField class], [UISearchBar class], nil] setImage:myImage forState:UIControlStateHighlighted]; 
2

Tôi chỉ có vấn đề tương tự như bạn mô tả với biểu tượng rõ ràng Reseting vào biểu tượng mặc định khi được nhấn.

Điều này có vẻ là do tôi đang cố gắng sử dụng cùng một UIImage cho cả trạng thái bình thường và được đánh dấu, chuyển sang hình ảnh khác cho trạng thái được đánh dấu đã khắc phục được sự cố.

9

tôi đã cùng một vấn đề, và điều chỉnh thứ tự của các báo cáo giải quyết nó:

Vì vậy, thay vì làm UIControlStateNormal đầu tiên sau đó UIControlStateHighlighted, thiết lập hình ảnh cho nhà nước Tóc Highlight đầu tiên

[searchBar setImage:clearIcon forSearchBarIcon:UISearchBarIconClear state:UIControlStateHighlighted]; 
[searchBar setImage:clearIcon forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal]; 
+1

Sự điên rồ này là gì? –

+0

Nó hoạt động! Tuyệt vời! Cảm ơn! – LLIAJLbHOu

+1

Nó luôn luôn là những cách kỳ lạ mà làm việc. Điều này nên được chấp nhận như là câu trả lời thực tế hơn là rối tung với các bài kiểm tra. Như đề xuất của nó có khả năng thay đổi và không tuyệt vời ở tất cả ... Cảm ơn cho suy nghĩ này. – StuartM

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