iOS--UISearchBar和UISearchDisplayController,ios--uisearchbar

來源:互聯網
上載者:User

iOS--UISearchBar和UISearchDisplayController,ios--uisearchbar

UISearchBar繼承自UIView、UIResponder、NSObject

  •    屬性:

 autocapitalizationType————自動對輸入文字物件進行大小寫設定(包含4種類型,但是有時候鍵盤會屏蔽此屬性)

 autocorrectionType————自動對輸入文字物件進行錯誤修正。

 backgroundImage————searchbar的背景圖片,如果圖片不是可伸縮的或者1點寬,則一般被平鋪

 barStyle————控制項的樣式

 delegate————控制項的委託,委託要遵從UISearchBarDelegate協議,預設是nil

 keyboardType————輸入時,鍵盤的樣式

 placeholder————半透明的提示文字,輸入搜尋內容消失

 prompt————顯示在控制項頂部的一行提示文字

 text————控制項上面的顯示的文字
 showsBookmarkButton————是否在控制項的右端顯示一個書的按鈕(輸入文字時消失)
 showsCancelButton————是否顯示cancel按鈕(預設是顯示)
 showsSearchResultsButton————是否在控制項的右端顯示搜尋結果按鈕
 searchResultsButtonSelected————搜尋結果按鈕是否被選中
 tintColor————bar的顏色(具有漸層效果)
 translucent————指定控制項是否會有透視效果
 scopeButtonTitles————搜尋欄下部的選擇欄,數組裡面的內容是按鈕的標題
 selectedScopeButtonIndex————搜尋欄下部的選擇欄按鈕的個數
 showsScopeBar————控制搜尋欄下部的選擇欄是否顯示出來(需設定為YES 才能使用scopebar)

 

UISearchBar不執行搜尋行為,必須使用delegate,當輸入搜尋文本、點擊button按鈕後,代理的方法會完成搜尋對應的操作。

1.編輯輸入事件:

  • – searchBar:textDidChange:  

  • – searchBar:shouldChangeTextInRange:replacementText:

  • – searchBarShouldBeginEditing:

  • – searchBarTextDidBeginEditing:

  • – searchBarShouldEndEditing:

  • – searchBarTextDidEndEditing:

2.點擊按鈕事件:

  • – searchBarBookmarkButtonClicked:

  • – searchBarCancelButtonClicked:

  • – searchBarSearchButtonClicked:

  • – searchBarResultsListButtonClicked:

3.Scope按鈕事件:

  • – searchBar:selectedScopeButtonIndexDidChange:

利用UISearchBar的委託事件 textDidChange, 當在搜尋方塊中輸入完成後,如果輸入的文本長度>0,可以調用自己的搜尋方法,得到搜尋結果,然後再reloadData,重新整理一下。如果輸入文本長 度<0,則需要恢複到未經處理資料。這個方法可以在邊輸入搜尋文本邊顯示結果。 如果需要按“search”按鈕再搜尋,則將上述操作放在searchBarSearchButtonClicked中。

 

利用UISearchDisplayController可以簡化很多操作,也能達到搜尋的目的。

屬性:

active————是搜尋介面可視化,預設為no,可用setActive方法設定.

delegate————委託

searchBar————在searchdisplaycontroller初始化後,searchbar是不可修改的,是readonly屬性的.

searchContentController————管理搜尋內容的試圖控制器,一般是一個UITableViewController的執行個體,意思是針對一個UITableView的內容進行搜尋

searchResultsDataSource————搜尋結果的資料來源

searchResultsDelegate————搜尋結果的委託

searchResultsTableView————搜尋結果要展示在哪個tableview中(read-only);

searchResultsTitle————搜尋結果視圖的title

 

初始化一個searchDisplayController:        

UISearchBar * theSearchBar = [[[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width-50, 40)] autorelease];        theSearchBar.placeholder = @"enter province name";        theSearchBar.autocorrectionType = UITextAutocorrectionTypeNo;        theSearchBar.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;          theSearchBar.scopeButtonTitles = [NSArray arrayWithObjects:@"All",@"A",@"B",@"C",@"D" ,nil];        theSearchBar.showsScopeBar = YES;        theSearchBar.keyboardType = UIKeyboardTypeNamePhonePad;        theSearchBar.showsBookmarkButton = YES;        tableView.tableHeaderView = theSearchBar;  //將searchBar添加到tableView的頭,注意滾動出螢幕後,搜尋方塊也不在了,只出現在首頁UISearchDisplayController * searchdispalyCtrl = [[UISearchDisplayController  alloc] initWithSearchBar:theSearchBar contentsController:self];        searchdispalyCtrl.active = NO;        searchdispalyCtrl.delegate = self;        searchdispalyCtrl.searchResultsDelegate=self;        searchdispalyCtrl.searchResultsDataSource = self;

 

使用UISearchDisplayDelegate的委託方法進行搜尋操作:

1.搜尋狀態改變:

  • – searchDisplayControllerWillBeginSearch:

  • – searchDisplayControllerDidBeginSearch:

  • – searchDisplayControllerWillEndSearch:

  • – searchDisplayControllerDidEndSearch:

2.裝載和卸載tableview:

  • – searchDisplayController:didLoadSearchResultsTableView:

  • – searchDisplayController:willUnloadSearchResultsTableView:

3.顯示和隱藏tableview:

  • – searchDisplayController:willShowSearchResultsTableView:

  • – searchDisplayController:didShowSearchResultsTableView:

  • – searchDisplayController:willHideSearchResultsTableView:

  • – searchDisplayController:didHideSearchResultsTableView:

4.搜尋條件改變時響應:

  • – searchDisplayController:shouldReloadTableForSearchString:  

  • – searchDisplayController:shouldReloadTableForSearchScope:

 

searchDisplayController 自身有一個searchResultsTableView,所以在執行操作的時候首先要判斷是否是搜尋結果的tableView,如果是顯示的就是搜尋結 果的資料,如果不是,是TableView自身的view,則需要顯示未經處理資料。

   

if(tableView == self.searchDisplayController.searchResultsTableView){        arr = [self.filterContent valueForKey:key]; //搜尋結果    }    else{        arr = [self.localresource valueForKey:key];  //未經處理資料    }

 

這樣就不需要每次都realoadData了。

 

一 個很好的執行個體可以參考:http://developer.apple.com/library/ios/#samplecode /TableSearch/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007848

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.