首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在UISearchBar中设置cancel按钮的样式

在UISearchBar中设置cancel按钮的样式
EN

Stack Overflow用户
提问于 2009-07-29 13:10:54
回答 21查看 47.7K关注 0票数 28

我有一个带有取消按钮的UISearchBar (它是使用-(void)setShowsCancelButton:animated显示的)。我像这样更改了搜索栏的tintColor,试图获得一个灰色的搜索栏:

代码语言:javascript
复制
UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 40)];
searchBar.tintColor = [UIColor colorWithWhite:0.8 alpha:1.0];

下面是它现在的样子--注意cancel按钮也是灰色的:http://twitpic.com/c0hte

有没有一种方法可以单独设置取消按钮的颜色,使其看起来更像这样:http://twitpic.com/c0i6q

EN

回答 21

Stack Overflow用户

回答已采纳

发布于 2009-07-29 15:00:19

你想要做的事情是相当艰难的。没有内置的钩子可以到达cancel按钮。

然而,有几个选择,如果你愿意吉米打开引擎盖。

首先,UISearchBar是一个UIView,Cancel按钮也是一个视图,正如您所预期的那样,它作为子视图添加到搜索栏中。

我做过一些实验,我可以告诉你,当按钮在屏幕上时,它的大小是48,30。

所以在viewWillAppear中,你可以这样做:

  1. 在searchBar子视图中查找大小为48,30的cancel按钮视图。(似乎只有一个--这可能会改变...)你可以加倍小心,寻找一个大致正确的位置(横向和纵向不同)。
  2. 在cancel按钮上添加了一个子视图。
  3. 子视图应该是一个UIControl (这样你可以设置enabled = NO,以确保触摸事件到达实际的cancel按钮)
  4. 它需要有正确的颜色和圆角;你需要出于我还不知道的原因(55,30似乎可以)虚构大小
  5. 如果searchBar.showsCancelButton总是是YES就可以;如果你不想在不编辑搜索字符串的时候让它消失,你需要找到一个钩子来在每次出现cancel按钮时添加覆盖。
  6. 正如你所看到的,这是一些丑陋的修补工作。睁大眼睛做这件事。
票数 13
EN

Stack Overflow用户

发布于 2012-04-11 23:00:39

您可以使用UIAppearance设置cancel按钮的样式,而不迭代UISearchBar的子视图,而是迭代the UIButton header does not currently have any methods annotated with UI_APPEARANCE_SELECTOR的子视图。

编辑:向下钻取子视图,直到得到cancel按钮

但在调用searchBar.setShowsCancelButton(true, animated: true)之前,这通常会返回nil。

代码语言:javascript
复制
extension UISearchBar {

var cancelButton : UIButton? {
    if let view = self.subviews.first {
        for subView in view.subviews {
            if let cancelButton = subView as? UIButton {
                return cancelButton
            }
        }
    }
    return nil
}
}
票数 27
EN

Stack Overflow用户

发布于 2012-10-01 18:26:16

更改“取消”按钮的标题:

代码语言:javascript
复制
[[UIButton appearanceWhenContainedIn:[UISearchBar class], nil] setTitle:@"newTitle" forState:UIControlStateNormal];

等同于的Swift:

代码语言:javascript
复制
   let cancelButton = UIButton.appearance(whenContainedInInstancesOf: [UISearchBar.self])
   cancelButton?.setTitle("cancel".localized, for: .normal)
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1200149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档