簡體   English   中英

可以在不激活UISearchBar鍵盤的情況下使用范圍欄按鈕過濾結果嗎?

[英]Can scope bar buttons be used to filter results without activating the keyboard of a UISearchBar?

我在加載時顯示一個帶有搜索欄和范圍欄按鈕的UITableView。 當用戶單擊范圍欄按鈕時,將顯示鍵盤,並且搜索欄將成為焦點(成為第一響應者)。

是否可以允許在不出現鍵盤的情況下使用范圍欄按鈕來過濾表項? 用戶可以通過在搜索文本輸入字段中專門點擊來使鍵盤出現。

最后,我的解決方案涉及在視圖控制器上使用兩個委托方法和一個狀態變量。

在視圖控制器上,我添加了屬性

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];
} 

從本質上講,我捕獲了是否按下了作用域按鈕,如果是這種情況,那么我應該在shouldBeginEditing中返回NO。 這樣,我可以防止焦點移到搜索欄。

當然。 實現取決於您如何設置UITableView,但是假設您使用的是NSFetchedResultsControllers,則可以執行以下操作:

1)假設您有3個范圍欄按鈕; 創建4個NSFRC。

2)為前3個NSFRC創建獲取請求,每個請求都有一個謂詞,以僅為相應的范圍欄按鈕選擇相關的范圍。

3)使用最終的NSFRC進行搜索。 請參閱有關如何使用UISearchDisplayController / UISearchBar過濾NSFetchedResultsController(CoreData)的 Brent Piddy的文章, 獲取有關如何實現搜索(如果尚未實現)的詳細信息。

4)用戶點擊范圍欄按鈕時, 請勿在搜索欄中寫任何文字,而只是交換相關的NFC。 突出顯示按鈕(或考慮使用UISegmentedControl),以便用戶可以看到他們正在查看的范圍。

5)當用戶在搜索欄中鍵入文本時,請按照上面Brent的帖子中的詳細說明在搜索欄NSFRC中進行交換。 刪除按鈕或UISegmentedControl上的所有突出顯示,並使搜索欄與用戶的文本一起留在屏幕上,以便他們再次可以看到他們正在查看的范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM