在更改UISearchBar的文本后,无法更改取消按钮标题颜色。

3
我正在使用以下代码更改UISearchBar取消按钮标题:
-(void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller{
self.searchDisplayController.searchBar.showsCancelButton = YES;
UIView* view=_otsinguRiba.subviews[0];
for (UIView *subView in view.subviews) {
    if ([subView isKindOfClass:[UIButton class]]) {
        UIButton *cancelButton = (UIButton*)subView;

        if (cancelButton) {
        [cancelButton setTitle:@"Test") forState:UIControlStateNormal];
        [cancelButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
        }
    }
}
}

虽然更改文本没有问题,但更改颜色则不行。它仍然是黑色的。

2个回答

10

我之前在 Stack Overflow 上找到了这个答案,但是我不记得在哪里找到的。以下是我正在使用的设置文本颜色的代码。

[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                [UIColor redColor],NSForegroundColorAttributeName,
                //[UIColor whiteColor],UITextAttributeTextShadowColor,
                //[NSValue valueWithUIOffset:UIOffsetMake(0, 1)],UITextAttributeTextShadowOffset,
                nil]
        forState:UIControlStateNormal];

确实可以这样做。但是你通常在什么方法中使用这段代码?已经在 - (void)viewDidLoad 中了吗? - Shiim
1
这是一个全局设置,将应用于您的应用程序中所有的UISearchBar元素。我通常在应用程序委托类中设置它们,在application didFinishLaunchingWithOptions方法中,以便在加载任何视图控制器之前应用这些设置。 - Brian Shamblen

0
你可以利用 iOS Runtime 属性 _cancelButton 来实现这个功能。
UIButton *cancelButton = [self.searchDisplayController.searchBar valueForKey:@"_cancelButton"];
[cancelButton setTitleColor:[UIColor yourColor] forState:UIControlStateNormal];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接