如何在iOS 7中更改文本UISearchBar的取消按钮颜色?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在iOS 7中更改文本UISearchBar的取消按钮颜色?相关的知识,希望对你有一定的参考价值。

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

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

我怎么能改变它?

答案

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

这是代码,如果要更改所有取消按钮,请添加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)
另一答案

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

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

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

另一答案

对于Swift 3:

self.searchController.searchBar.tintColor = UIColor.white
另一答案

在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)
另一答案

对于swift 4.2

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

对于使用Swift的人,我不得不首先添加Eddie K's extension

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

UIBarButtonItem.appearanceWhenContainedWithin(UISearchBar.self).setTitleTextAttributes()
另一答案

对于IOS 7或更高版本,不推荐使用IOS 7以下的文本属性

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

UISearchBar的另一种选择是SHSearchBar。这个快速框架很容易定制,没有黑客攻击,开源,有很多单元测试,可以通过Cocoapods获得。它至少需要iOS 8。

另一答案

斯威夫特4

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

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

[[UIBarButtonItem appearanceWhenContainedIn: [UISearchBar class], nil] setTintColor:[UIColor redColor]];
另一答案

你可以这样做

[yourSearchBarName setTintColor:[UIColor whateverColorYouWant]];
另一答案

一种更简单的方式 - >

self.searchbar.tintColor = [UIColor darkGrayColor];
另一答案

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

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];
    }
}
另一答案

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

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

希望它对你有用。

另一答案

更新了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工作

使用appearance模块的UIAppearance函数 -

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

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

要么 -

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

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

enter image description here

另一答案

斯威夫特3:

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

searchController.searchBar.tintColor = .red

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

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.white], for: .normal)
另一答案
[[UISearchBar appearance] setTintColor:[UIColor redColor]];

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

如何更改UISearchBar中文本字段的位置

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

在 iOS 9+ 中更改 UISearchBar 文本颜色

在 iOS 7.1 中,UISearchBar 的文本和占位符属性不再起作用

ios 7中yelp和foursquare如何将UISearchBar中的搜索图标保持在左侧

无法更改 iOS 7 搜索栏中的文本颜色