范围栏按钮可用于过滤结果而无需激活UISearchBar的键盘吗?

Mik*_*ike 1 iphone objective-c uitableview uisearchbar ios

我在加载时显示带有搜索栏和范围栏按钮的UITableView.当用户点击示波器条按钮时,将显示键盘并且搜索栏将获得焦点(成为第一响应者).

是否可以允许使用示波器条按钮来过滤表项而不显示键盘?用户可以通过在搜索文本输入字段中专门点击来显示键盘.

Mik*_*ike 5

我的解决方案最后涉及在视图控制器上使用两个委托方法和一个状态变量.

在视图控制器上我添加了属性

NSNumber *scopeButtonPressedIndexNumber; 

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {  

  if (self.scopeButtonPressedIndexNumber != nil) {
    self.scopeButtonPressedIndexNumber = nil; //reset
    return NO;
  }
  else {
    return YES;  
  }

} 

- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope {
  self.scopeButtonPressedIndexNumber = [NSNumber numberWithInt:selectedScope];
} 
Run Code Online (Sandbox Code Playgroud)

本质上,如果按下范围按钮,我会捕获,如果是这种情况,我会在shouldBeginEditing中返回NO.通过这种方式,我能够防止焦点转到搜索栏.