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)
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)
这似乎是Xcode中的一个错误.我将此错误提交给Apple的错误报告网站,他们随后要求提供更多示例代码和用例.
感谢大家为解决这个问题所做的努力.
归档时间: |
|
查看次数: |
24032 次 |
最近记录: |