7

我曾嘗試使用下面的代碼設置背景圖片搜索欄和搜索欄。我正在使用Xcode5 DP2和ios 7.的UISearchBar取消按鈕自定義圖像

[[UISearchBar appearance] setSearchFieldBackgroundImage:[UIImage imageNamed:@"fieldBg"] forState:UIControlStateNormal]; 
[[UISearchBar appearance] setBackgroundImage:[UIImage imageNamed:@"searchBarBg"]]; 

此代碼正常工作。但我也想定製取消按鈕圖像。爲此,我在viewWillAppear和searchBarTextDidBeginEditing中使用了以下代碼。它在加載時第一次工作。

for (UIView *searchbuttons in _searchBar.subviews) 
{ 
    if ([searchbuttons isKindOfClass:[UIButton class]]) 
    { 
     UIButton *cancelButton = (UIButton*)searchbuttons; 
     cancelButton.enabled = YES; 
     [cancelButton setBackgroundImage:[UIImage imageNamed:@"cancelImage"] forState:UIControlStateNormal]; 
     break; 
    } 
} 

如果取消按鈕單擊一次,那麼自定義圖像將不會在那裏出現。我登錄了_searchBar.subviews,並得到了結果

po [_searchBar subviews] 
<__NSArrayM 0x210b1120>(
<UISearchBarBackground: 0x1fd6ff80; frame = (0 0; 768 44); userInteractionEnabled = NO; layer = <CALayer: 0x1fdafaf0>>, 
<UISearchBarTextField: 0x1fd6f2f0; frame = (5 -3; 758 50); text = ''; clipsToBounds = YES; opaque = NO; gestureRecognizers = <NSArray: 0x1fdc10b0>; layer = <CALayer: 0x1fd6f480>> 
) 

從這個我理解的是,取消按鈕是不是我在哪裏檢查子視圖下的到來。我在所有可能的委託方法中嘗試了上述代碼,但無法解決問題。

回答

2

可以在layoutSubviews功能使用[self setShowsCancelButton:NO animated:NO];和一個自定義UIButton添加到你喜歡的地方。 你只需要爲編寫取消按鈕的功能編寫代碼。