如何在iOS7中更改UISearchBar的取消按钮的textColor?

Posted

技术标签:

【中文标题】如何在iOS7中更改UISearchBar的取消按钮的textColor?【英文标题】:How to change textColor of Cancel button of UISearchBar in iOS7? 【发布时间】:2013-10-06 08:09:34 【问题描述】:

我需要在ios7中更改UISearchBar的取消按钮文字颜色。

通常UISearchBar 取消按钮textColor 是蓝色的,我想将textColor 更改为redColor

我该如何改变它?

【问题讨论】:

Swift 4.2, 4.0+,我添加了多个自定义的答案,包括此处的 searchBar 的 cancelButton ***.com/questions/51345642 【参考方案1】:

我找到了自己问题的答案。

这里是代码,如果要更改所有取消按钮,请添加AppDelegate

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

斯威夫特:

let attributes = [NSForegroundColorAttributeName : UIColor.red]
    UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(attributes, for: .normal)

【讨论】:

UITextAttributeTextColor 等在 iOS7 中已弃用。改为使用 NSForegroundColorAttributeName 等。 我不知道这在以前是否有效,但从 7.0.3 开始它不起作用。 [[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTintColor:[UIColor blackColor]]; 您可以简单地更改色调颜色! UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.white], for: UIControlState.normal) 真的很有帮助的答案...!!【参考方案2】:

如果只想设置按钮的文字颜色,只需要一行:

[[UIBarButtonItem appearanceWhenContainedIn: [UISearchBar class], nil] setTintColor:[UIColor redColor]];

【讨论】:

【参考方案3】:

你可以这样做

[yourSearchBarName setTintColor:[UIColor whateverColorYouWant]];

【讨论】:

这个问题,它还设置了光标颜色。【参考方案4】:

更简单的方法 -->

self.searchbar.tintColor = [UIColor darkGrayColor];

【讨论】:

【参考方案5】:

Swift 5更新:

let searchBarCancelButtonForegroundColor = UIColor.red
let attributes = [NSAttributedString.Key.foregroundColor: searchBarCancelButtonForegroundColor]

// Regular mode
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(attributes, for: .normal)

// After click
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).tintColor = searchBarCancelButtonForegroundColor

SWIFT 4工作

使用UIAppearance模块的appearance函数-

方法1:-在加载时显示取消按钮searchBar-

let attributes = [NSAttributedStringKey.foregroundColor : UIColor.red]
    UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(attributes, for: .normal)

或 -

方法二:- 点击searchBar 后显示取消按钮颜色 -

  UIBarButtonItem.appearance(whenContainedInInstancesOf:[UISearchBar.self]).tintColor = UIColor.red

【讨论】:

很高兴我能帮上忙 :)【参考方案6】:

您可以在- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 中像这样更改UISearchBar 的子视图

UIView *view = [_searchBar.subviews objectAtIndex:0];
for (UIView *subView in view.subviews) 
    if ([subView isKindOfClass:[UIButton class]]) 
        UIButton *cancelButton = (UIButton *)subView;
        [cancelButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        [cancelButton setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
    

【讨论】:

挖掘子视图是一种脆弱的方式。使用适当的 UIAppearance “当包含在”方法中。【参考方案7】:

您可以按如下方式格式化您的搜索栏取消按钮

[[UIBarButtonItem appearanceWhenContainedIn: [UISearchBar class], nil] setTintColor:[UIColor whiteColor]];
    [[UIBarButtonItem appearanceWhenContainedIn: [UISearchBar class], nil] setTitle:@"Your Text Here"];

希望它对你有用。

【讨论】:

这在 iOS 9 中已弃用。框架中的“使用 +appearanceWhenContainedInInstancesOfClasses: 代替”。【参考方案8】:

斯威夫特 3:

使用此代码设置红色(文本, 课程,按钮)

searchController.searchBar.tintColor = .red

如果您想将取消按钮颜色更改为白色,也请添加此代码

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.white], for: .normal)

【讨论】:

【参考方案9】:
[[UISearchBar appearance] setTintColor:[UIColor redColor]];

【讨论】:

【参考方案10】:

对于 Swift 4.2

let attributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(attributes, for: UIControl.State.normal)

【讨论】:

【参考方案11】:

我独立设置光标和按钮颜色的方法是:我在 App Delegate 中将光标颜色设置为蓝色 (-application:didFinishLaunchingWithOptions:):

[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTintColor:[UIColor blueColor]];

然后使用每个控制器中搜索栏的色调颜色来设置按钮颜色。您甚至可以在情节提要上设置色调颜色。

【讨论】:

【参考方案12】:

对于 Swift 3:

self.searchController.searchBar.tintColor = UIColor.white

【讨论】:

【参考方案13】:

在 Swift 4 上测试

    let barButtonItem = UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self])
    barButtonItem.title = NSLocalizedString("Cancel", comment: "")
    barButtonItem.setTitleTextAttributes([.font            : UIFont.systemFont(ofSize: 15.0, weight: .medium),
                                          .foregroundColor : #colorLiteral(red: 0.1960784314, green: 0.1960784314, blue: 0.1960784314, alpha: 1)], for: .normal)

【讨论】:

【参考方案14】:

对于使用 Swift 的人,我必须先添加 Eddie K's extension

然后我可以这样称呼它(基本上是 Sabo 在接受的答案中所做的):

UIBarButtonItem.appearanceWhenContainedWithin(UISearchBar.self).setTitleTextAttributes()

【讨论】:

【参考方案15】:

UITextAttribute 在下面的 IOS 7 或更高版本中被弃用

[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTitleTextAttributes:@NSForegroundColorAttributeName : [UIColor whiteColor], NSFontAttributeName : [UIFont fontWithName:@"Helvetica" size:17] forState:UIControlStateNormal];

【讨论】:

【参考方案16】:

UISearchBar 的替代品是SHSearchBar。这个 swift 框架无需黑客攻击即可轻松定制,开源,具有大量单元测试,可通过 Cocoapods 获得。它至少需要 iOS 8。

【讨论】:

【参考方案17】:

斯威夫特 4

let uiButton = bar.value(forKey: "cancelButton") as? UIButton
uiButton?.setTitle("Cancel", for: .normal)
uiButton?.setTitleColor(UIColor.white,for: .normal)

【讨论】:

以上是关于如何在iOS7中更改UISearchBar的取消按钮的textColor?的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 8 中更改 UISearchBar 取消按钮文本

如何在 iOS7 中更改 UISearchBar 的背景颜色

如何在 iOS7 中更改 UISearchBar 的 inputView?

如何在 Swift 中更改 UISearchBar 上的“取消”按钮的颜色

如何在 iOS 7 的 UISearchBar 中更改位置或隐藏放大镜图标?

更改搜索栏取消按钮的名称 IOS 7