在 iOS8 中使用 UISearchBar 启用取消按钮

Posted

技术标签:

【中文标题】在 iOS8 中使用 UISearchBar 启用取消按钮【英文标题】:Enable cancel button with UISearchBar in iOS8 【发布时间】:2014-11-19 15:20:31 【问题描述】:

有什么方法可以启用 UISearchBar 的“取消”按钮吗?现在,每当我调用 resignFirst 响应者时,取消按钮都会被禁用。只有当我再次点击搜索栏时,才会启用取消。有没有办法停止禁用取消按钮?

【问题讨论】:

【参考方案1】:

这是适用于 ios 8 和 Swift 的有效解决方案。

func enableCancleButton (searchBar : UISearchBar) 
    for view1 in searchBar.subviews 
        for view2 in view1.subviews 
            if view2.isKindOfClass(UIButton) 
                var button = view2 as! UIButton
                button.enabled = true
                button.userInteractionEnabled = true
            
        
    

【讨论】:

【参考方案2】:

对于 iOS7:

- (void)enableCancelButton
    for (UIView *view in self.subviews)
        for (id subview in view.subviews)
            if ([subview isKindOfClass:[UIButton class]])
                [subview setEnabled:YES];
                return;
            
        
    

为了使上述代码在 iOS8 中工作, 您需要在启用子视图之前添加延迟:

- (void)enableCancelButton
    for (UIView *view in self.subviews)
        for (id subview in view.subviews)
            if ([subview isKindOfClass:[UIButton class]])
                dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 10), dispatch_get_main_queue(), ^
                    [subview setEnabled:YES];
                );
                return;
            
        
    

【讨论】:

【参考方案3】:
UIBarButtonItem.appearance().enabled = true 

帮我搞定了

【讨论】:

以上是关于在 iOS8 中使用 UISearchBar 启用取消按钮的主要内容,如果未能解决你的问题,请参考以下文章

搜索框UISearchController的使用(iOS8.0以后替代UISearchBar + UISearchDisplayController)

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

在 IOS 8、Xcode 6 中插入 UISearchBar [关闭]

如何在 iOS 8 中使用 UISearchController,其中 UISearchBar 在我的导航栏中并且有范围按钮?

自定义UISearchBar

iOS 8.0 中的 UISearchBar barTintColor clearColor 错误