UISearchBar 中不显示取消按钮

Posted

技术标签:

【中文标题】UISearchBar 中不显示取消按钮【英文标题】:Cancel button is not shown in UISearchBar 【发布时间】:2015-05-27 06:15:19 【问题描述】:

我有UICollectionView。单击UINavigationBar 中的搜索按钮时,我将UISearchControllersearchbar 添加为UINavigationItem 的标题视图。对于 iPhone,它工作正常。对于 iPad,cancel 按钮未显示。仅搜索栏就占据了整个宽度。

谁能帮我解决这个问题?提前致谢。

【问题讨论】:

您是否在 iPhone 和 iPad 上使用不同的故事板或 xib? 没有。我没有使用故事板或 xib。 尝试设置searchBar.showsCancelButton = YES; ios7 when UIsearchbar added in UINavigationBar not showing cancel button 的可能重复项 文档明确指出:“对于在 iPad 上运行的应用程序,此属性的值被忽略,并且不显示取消按钮”。我认为这不合适,尤其是对于幻灯片/拆分视图场景。所以我提交了一个雷达:openradar.appspot.com/37498710 【参考方案1】:

iOS7 在添加到导航栏时不显示取消按钮。您可以像这样将搜索栏放在另一个视图中。

UISearchBar *searchBar = [UISearchBar new];
searchBar.showsCancelButton = YES;
[searchBar sizeToFit];
UIView *viewForSearchBar = [[UIView alloc]initWithFrame:searchBar.bounds];
[viewForSearchBar addSubview:searchBar];
self.navigationItem.titleView = viewForSearchBar;

【讨论】:

不错的选择:***.com/questions/18986407/…【参考方案2】:

我遇到了同样的问题,在 iPhone 上搜索取消显示良好,但在 iPad 上却没有。

UISearchBar 包裹在另一个UIView 中的解决方法对我来说效果不佳,因为它具有不同的外观和错误的旋转宽度。

我的解决方案很简单 - 使用搜索而不取消,并将取消添加为 UIBarButtonItem

【讨论】:

这对我来说似乎是正确的答案。 iPad 不支持取消按钮,因此只需手动将其添加为 UIBarButtonItem【参考方案3】:
Added rightBarButtonItem with selector will work fine for me. And adding searchBar inside view before setting to navigation title view was not showing properly.
Code:- 
self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.plain, target: self, action: #selector(self.dismissView))
func dismissView() 
        if self.controller?.navigationController?.popViewController(animated: true) == nil 
            self.controller?.dismiss(animated: true, completion: nil)
        
    

【讨论】:

【参考方案4】:

试试这个。为节目取消按钮添加复选标记。

【讨论】:

OP 提到它适用于 iPhone 但不适用于 iPad【参考方案5】:

根据苹果文档setShowsCancelButton

在 iPad 上运行的应用程序不会显示取消按钮,即使当 您为 showsCancelButton 参数指定 YES。

我不确定替代方案,但这是苹果为我们提供的。

【讨论】:

【参考方案6】:

Swift 版本:-

我尝试了@Nikita Khandelwal 方法,但仍然不适合 ipad 视图。这是快速代码,已作为正确答案给出:-

let searchBar: UISearchBar = UISearchBar()
searchBar.showCancelButton = true
searchBar.placeholder = "Search Your Job Title"
searchBar.fitToSize()
searchBar.delegate = self //do not need if you delegate searchBar
let viewForSearchBar: UIView = UIView(frame: searchBar.bounds)
viewForSearchBar.addSubview(searchBar)
self.navigationItem.titleView = viewForSearchBar

********* 但是还有另一种方法可以正确设置取消按钮并适合视图:-

    将搜索栏设置为导航栏标题视图:-

    let searchBar: UISearchBar = UISearchBar()
    searchBar.showCancelButton = true
    searchBar.placeholder = "Search Your Job Title"
    searchBar.delegate = self //do not need if you delegate searchBar
    self.navigationItem.titleView = searchBar
    

    将 Bar 按钮拖放到视图控制器的右侧并将其命名为 Cancel。

    然后将该按钮连接到此功能:-

    @IBAction func iPadCancelButton(sender: AnyObject) 
           UIApplication.sharedApplication().sendAction("resignFirstResponder", to:nil, from:nil, forEvent:nil)
          self.dismissViewControllerAnimated(true, completion: nil)
    
    

【讨论】:

【参考方案7】:

对于使用 Xcode 11 构建的 iOS 13,我需要手动设置取消按钮上的显示值,具体取决于搜索控制器是否可见

【讨论】:

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

UIToolbar 中的 UISearchBar 不会显示取消按钮

如果在 viewDidAppear 之前显示,UISearchBar 取消按钮没有样式

在文本字段中显示 UISearchBar "X" 与相邻的取消按钮

如何触发 UISearchBar 中的取消按钮?

UISearchBar 取消

UIsearchBar 取消按钮导致导航栏未隐藏