2012-10-30 27 views
0

嘗試對UITableView進行子類化以具有內置搜索功能是否可能(或可行)?用於內置搜索的子類UITableView

有兩方面的原因,我想這樣做:

重用:我可以用在多個位置相同的子類,在我與不同數據源的項目。 清潔代碼:它會使我的視圖控制器變得混亂。所有用於實現搜索的管道都將整齊地包裝在子類實現中。

任何想法如何去做這件事?

回答

0

使用UISearchDisplayController

從蘋果DOC,

甲搜索顯示控制器管理搜索欄的顯示和顯示由 另一個視圖控制器管理的搜索數據的結果的 表視圖。

您使用搜索欄和負責管理原始內容的 視圖控制器初始化搜索顯示控制器,並將其搜索到的內容爲 。當用戶開始搜索時,搜索顯示控制器 負責將搜索界面疊加在原始視圖控制器的視圖上並顯示搜索結果。 結果顯示在由搜索 顯示控制器創建的表格視圖中。除了原始視圖控制器之外, 在邏輯上還有四個其他角色。這些通常都是由同一個對象(通常是原始視圖控制器本身)發揮的。

它可以作爲實現,

searchController = [[UISearchDisplayController alloc] 
         initWithSearchBar:searchBar contentsController:self]; 
searchController.delegate = self; 
searchController.searchResultsDataSource = self; 
searchController.searchResultsDelegate = self; 

UISearchDisplayController本身封裝了所有正常的搜索功能。如果你想要的話,你可以繼承它來實現你打算做的任何事情。你可以在任何課堂上使用它。

0

我想我應該要求澄清一點:你想要用戶的搜索只需滾動到表中的一行,或者你想它過濾行,只顯示符合搜索條件的行?

假設你想它來過濾行...

這將是相當複雜作出UITableView子類來做到這一點,因爲你需要干預自己的私人UITableViewDataSourceUITableViewDelegate在前面「用戶」數據源和委託。

它也可能效率很低,取決於您如何獲取表視圖的數據。如果表視圖可以有成千上萬的行,並且它們來自(比方說)SQLite數據庫或核心數據,那麼數據源可以更有效地搜索匹配的行。在表格視圖中,你別無選擇,只能逐個遍歷行,檢查每個匹配項。或者你必須擴展數據源協議,爲表視圖提供一種將搜索字符串傳遞給數據源的方式......這似乎違背了將搜索放在表視圖中的目標。

如果您告訴我們更多關於數據來自何種表格視圖的信息,我們可能會給您提供更好的建議。