隐藏UISearchBar取消按钮

Art*_*sev 28 cocoa-touch objective-c uisearchbar uisearchdisplaycontroller ios

我有一个UISearchDisplayController和UISearchBar从我的笔尖通过Outlets连接到我的ViewController.

我想隐藏取消按钮,以便用户永远不会看到它.问题是以下代码隐藏了按钮,但仅在将其显示给用户一毫秒后(例如,它在模拟器和设备上闪烁然后消失在视图之外).

- (void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller 
{
    controller.searchBar.showsCancelButton = NO;
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来隐藏它?

小智 39

我设法通过子类隐藏"取消"按钮UISearchBar并覆盖此方法:

-(void)layoutSubviews{
    [super layoutSubviews];
    [self setShowsCancelButton:NO animated:NO];
}
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用视图控制器的`-viewWillLayoutSubviews`方法,而不是子类化`UISearchBar`.这对我有用! (5认同)
  • 这很棒!我想我尝试了其他所有方法来解决这个问题以避免子类化,但是无法完成它!但这完美地修复了它!谢谢! (2认同)
  • 虽然这有效,但是在搜索控制器变为非活动状态然后再次激活之后,它导致我的Caret停止出现.我的解决方案是覆盖我的`UISearchBar`子类中的`setShowsCancelButton:animated:`方法来调用`[super setShowsCancelButton:NO animated:animated];`.这允许取消按钮保持隐藏并解决我丢失的插入问题. (2认同)

BFe*_*her 15

我有同样的问题,但以不同的方式修复它.

对于那些不能或不想要子类的人UISearchDisplayController,我通过添加一个监听器UIKeyboardWillShowNotification[self setShowsCancelButton:NO animated:NO]在那里设置来修复该问题.

viewWillAppear::

// Add keyboard observer:
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillAppear:)
                                             name:UIKeyboardWillShowNotification
                                           object:nil];
Run Code Online (Sandbox Code Playgroud)

然后你创建:

- (void)keyboardWillAppear:(NSNotification *)notification
{
    [YOUR-SEARCHBAR-HERE setShowsCancelButton:NO animated:NO];
}
Run Code Online (Sandbox Code Playgroud)

别忘了添加,

[[NSNotificationCenter defaultCenter] removeObserver:self];
Run Code Online (Sandbox Code Playgroud)

viewWillDisappear:!

希望这可以帮助!


小智 8

与Nimrod的答案类似,您也可以子类化UISearchDisplayController并实现该setActive:animated:方法:

- (void)setActive:(BOOL)visible animated:(BOOL)animated {
    [super setActive:visible animated:animated];
    self.searchBar.showsCancelButton = NO;
}
Run Code Online (Sandbox Code Playgroud)


Art*_*sev 6

这似乎是Xcode中的一个错误.我将此错误提交给Apple的错误报告网站,他们随后要求提供更多示例代码和用例.

感谢大家为解决这个问题所做的努力.

  • 我有同样的问题,但相反.我尝试使用nib文件并以编程方式创建UISearchDisplayController和UISearchBar,但我不需要隐藏取消按钮,而是需要一直显示它.在控制器中,我将视图设置为可见的按钮,以及一些委托方法,但是当我取消搜索时,按钮消失,然后重新出现.希望这很快得到排序. (2认同)
  • 他们回答称这是一个已知问题,他们正试图修复它. (2认同)