如何使用UISearchBar启用取消按钮?
在iPhone上的联系人应用程序中,如果输入搜索词,然后点击“搜索”按钮,键盘被隐藏,但取消按钮仍处于启用状态。 在我的应用程序中,当我调用resignFirstResponder时取消按钮被禁用。
任何人都知道如何隐藏键盘,同时保持取消按钮处于启用状态?
我使用下面的代码:
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
[searchBar resignFirstResponder];
}
键盘滑出视图,但搜索文本字段右侧的“取消”按钮被禁用,因此我无法取消搜索。 联系人应用程序将取消按钮保持在启用状态。
我想也许有一个解决方案是深入到searchBar对象,并在实际的文本字段上调用resignFirstResponder,而不是搜索栏本身。
任何输入赞赏。
尝试这个
for(id subview in [yourSearchBar subviews])
{
if ([subview isKindOfClass:[UIButton class]]) {
[subview setEnabled:YES];
}
}
此方法在iOS7中工作。
- (void)enableCancelButton:(UISearchBar *)searchBar
{
for (UIView *view in searchBar.subviews)
{
for (id subview in view.subviews)
{
if ( [subview isKindOfClass:[UIButton class]] )
{
[subview setEnabled:YES];
NSLog(@"enableCancelButton");
return;
}
}
}
}
(使用[_searchBar resignFirstResponder]之后,一定要在任何地方调用它。)
当您开始滚动表格而不是点击“搜索”按钮时,接受的解决方案将不起作用。 在这种情况下,“取消”按钮将被禁用。
这是我的解决方案,每次使用KVO禁用时,都会重新启用“取消”按钮。
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// Search for Cancel button in searchbar, enable it and add key-value observer.
for (id subview in [self.searchBar subviews]) {
if ([subview isKindOfClass:[UIButton class]]) {
[subview setEnabled:YES];
[subview addObserver:self forKeyPath:@"enabled" options:NSKeyValueObservingOptionNew context:nil];
}
}
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
// Remove observer for the Cancel button in searchBar.
for (id subview in [self.searchBar subviews]) {
if ([subview isKindOfClass:[UIButton class]])
[subview removeObserver:self forKeyPath:@"enabled"];
}
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
// Re-enable the Cancel button in searchBar.
if ([object isKindOfClass:[UIButton class]] && [keyPath isEqualToString:@"enabled"]) {
UIButton *button = object;
if (!button.enabled)
button.enabled = YES;
}
}
链接地址: http://www.djcxy.com/p/7701.html