7

我使用下面的代码为搜索栏和搜索字段设置了背景图像。我正在使用 Xcode5 DP2 和 ios 7。

[[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>>
)

由此我了解到取消按钮不在我正在检查的子视图下。我在所有可能的委托方法中尝试了上述代码,但无法解决问题。

4

1 回答 1

2

您可以[self setShowsCancelButton:NO animated:NO];在功能中使用并在您喜欢的地方layoutSubviews添加自定义。UIButton您只需要为取消按钮的功能编写代码就可以了。

于 2013-07-26T06:44:42.483 回答