溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

UISearchBar和UISearchDisplayController

發(fā)布時(shí)間:2020-06-18 06:11:46 來源:網(wǎng)絡(luò) 閱讀:2121 作者:Im劉亞芳 欄目:移動開發(fā)

一:添加searchBar的兩種方式:

////////////添加搜索欄方式一:直接畫一個,畫不好的話會覆蓋別的東西/////


     self.tableView.backgroundView = [[UIView alloc] init];

    [self.tableView setBackgroundColor:[UIColor clearColor]];

    UISearchBar *mySearchBar = [[UISearchBar alloc]

                                initWithFrame:CGRectMake(0.0, 0.0, self.view.bounds.size.width, 45)];

    mySearchBar.delegate = self;

    mySearchBar.showsCancelButton = NO;

    mySearchBar.barStyle=UIBarStyleDefault;

    mySearchBar.placeholder=@"Enter Name or Categary";

    mySearchBar.keyboardType=UIKeyboardTypeNamePhonePad;

    [self.view addSubview:mySearchBar];

    [mySearchBar release];


    

/////////////添加搜索欄方式二:添加置tableView////////////////

    

    UISearchBar *searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0.0, 0.0, self.view.bounds.size.width,40)];

    searchBar.placeholder=@"Enter Name";//默認(rèn)搜索框文本內(nèi)容;

    searchBar.barStyle = UIBarStyleBlackTranslucent;//設(shè)置bar的風(fēng)格

    searchBar.delegate = self;

    self.tableView.tableHeaderView = searchBar;//searchBar添加到tableView上;且searchBar添加到tableView的頭,注意滾動出屏幕后,搜索框也不在了,只出現(xiàn)在首頁

    searchBar.autocorrectionType = UITextAutocorrectionTypeNo;//是否自動對輸入文本對象進(jìn)行風(fēng)格校正

    searchBar.autocapitalizationType = UITextAutocapitalizationTypeNone;//設(shè)置什么時(shí)候用大寫

    

    searchBar.backgroundColor = [UIColor redColor];//設(shè)置bar的背景顏色;

    searchBar.backgroundImage = [UIImagep_w_picpathNamed:@"item.png"];//修改背景圖片

    searchBar.showsSearchResultsButton =YES;//是否在控件的右端顯示搜索結(jié)果按鈕

    searchBar.showsCancelButton = YES;

    searchBar.showsScopeBar = YES;//控制搜索欄下部的選擇欄是否顯示出來

    searchBar.prompt = @"ewq";//顯示在控件頂部的一行提示文字

    searchBar.translucent = YES;//指定控件是否會有透視效果

二、searchBar的結(jié)構(gòu)了解:

 

iPhone開發(fā)UISearchBar學(xué)習(xí)是本文要學(xué)習(xí)的內(nèi)容,主要介紹了UISearchBar的使用,不多說,我們先來看詳細(xì)內(nèi)容。關(guān)于UISearchBar的一些問題。

1、修改UISearchBar的背景顏色

 

UISearchBar是由兩個subView組成的,一個是UISearchBarBackGround,另一個是UITextField. 要IB中沒有直接操作背景的屬性。方法是直接將 UISearchBarBackGround移去  (主要是了解這段話,其實(shí)換背景圖片和背景顏色可以直接換。了解后可用于換searchBar的樣式)

 

    for (UIView *subview in searchBar.subviews)

    {

        if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")])

        {

            [subview removeFromSuperview];

            break;  

        }   

    }

    

第二種解決的方法:

[[searchBar.subviews objectAtIndex:0]removeFromSuperview];

換cancel的樣式:

 

for(id cc in [searchBar subviews])

    {

        if([cc isKindOfClass:[UIButton class]])

        {

            UIButton *btn = (UIButton *)cc;

            [btn setTitle:@"取消"  forState:UIControlStateNormal];

        }

        

    }

三、serarBar的屬性及代理:

 

 

屬性:作用
UIBarStyle barStyle
控件的樣式
id delegate
設(shè)置控件的委托
NSString *text
控件上面的顯示的文字
NSString *prompt
顯示在頂部的單行文字,通常作為一個提示行
NSString *placeholder
半透明的提示文字,輸入搜索內(nèi)容消失
BOOL showsBookmarkButton
是否在控件的右端顯示一個書的按鈕(沒有文字的時(shí)候)
BOOL showsCancelButton
是否顯示cancel按鈕
BOOL showsSearchResultsButton
是否在控件的右端顯示搜索結(jié)果按鈕(沒有文字的時(shí)候)
BOOL searchResultsButtonSelected
搜索結(jié)果按鈕是否被選中
UIColor *tintColor
bar的顏色(具有漸變效果)
BOOL translucent
指定控件是否會有透視效果
UITextAutocapitalizationType
autocapitalizationType
設(shè)置在什么的情況下自動大寫
UITextAutocorrectionType
autocorrectionType
對于文本對象自動校正風(fēng)格
UIKeyboardType
keyboardType
鍵盤的樣式
NSArray *scopeButtonTitles
搜索欄下部的選擇欄,數(shù)組里面的內(nèi)容是按鈕的標(biāo)題
NSInteger selectedScopeButtonIndex
搜索欄下部的選擇欄按鈕的個數(shù)
BOOL showsScopeBar
控制搜索欄下部的選擇欄是否顯示出來

代理列表: 

 

編輯代理

 

  • – searchBar:textDidChange:

  • – searchBar:shouldChangeTextInRange:replacementText:

  • – searchBarShouldBeginEditing:

  • – searchBarTextDidBeginEditing:

  • – searchBarShouldEndEditing:

  • – searchBarTextDidEndEditing:

點(diǎn)擊按鈕

  • – searchBarBookmarkButtonClicked:

  • – searchBarCancelButtonClicked:

  • – searchBarSearchButtonClicked:

  • – searchBarResultsListButtonClicked:

范圍代理

  • – searchBar:selectedScopeButtonIndexDidChange:

  • 利用UISearchBar的委托事件 textDidChange, 當(dāng)在搜索框中輸入完成后,如果輸入的文本長度>0,可以調(diào)用自己的搜索方法,得到搜索結(jié)果,然后再reloadData,刷新一下。如果輸入文本長 度<0,則需要恢復(fù)到原始數(shù)據(jù)。這個方法可以在邊輸入搜索文本邊顯示結(jié)果。 如果需要按“search”按鈕再搜索,則將上述操作放在searchBarSearchButtonClicked中。


  • searchBar的范圍控件showsScopeBar,官方學(xué)名叫Scope Buttons。
    首先就要設(shè)置這個屬性:
    self.searchBar.showsScopeBar = YES;
    然后要給他添加按鈕。比如說,這樣:self.searchBar.scopeButtonTitles = [NSArray arrayWithObjects:@"BOY",@"GIRL",@"ALL",nil];
    還有一個很重要的事情就是我們要實(shí)現(xiàn)這個代理UISearchBarDelegate里的這個方法searchBar:selectedScopeButtonIndexDidChange:。告訴表格,你選擇的范圍是啥。
    還有要是設(shè)置默認(rèn)選擇哪個按鈕的話,要設(shè)置這個屬性,像這樣就是默認(rèn)選中第1個啦。
    self.searchBar.selectedScopeButtonIndex = 0;

四、UISearchDisplayController使用:

利用UISearchDisplayController可以簡化很多操作,也能達(dá)到搜索的目的。

 

屬性:

active————是搜索界面可視化,默認(rèn)為no,可用setActive方法設(shè)置.

delegate————委托

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

searchContentController————管理搜索內(nèi)容的試圖控制器,一般是一個UITableViewController的實(shí)例,意思是針對一個UITableView的內(nèi)容進(jìn)行搜索

searchResultsDataSource————搜索結(jié)果的數(shù)據(jù)源

searchResultsDelegate————搜索結(jié)果的委托

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

searchResultsTitle————搜索結(jié)果視圖的title

 

初始化一個searchDisplayController:

在正常初始化完一個searchBar后再加上如下代碼:     

      UISearchDisplayController * searchdispalyCtrl = [[UISearchDisplayController  alloc] initWithSearchBar:theSearchBar contentsController:self];

        searchdispalyCtrl.active = NO;

        searchdispalyCtrl.delegate = self;

        searchdispalyCtrl.searchResultsDelegate=self;

        searchdispalyCtrl.searchResultsDataSource = self;

 

使用UISearchDisplayDelegate的委托方法進(jìn)行搜索操作:

1.搜索狀態(tài)改變:

  • – searchDisplayControllerWillBeginSearch:

  • – searchDisplayControllerDidBeginSearch:

  • – searchDisplayControllerWillEndSearch:

  • – searchDisplayControllerDidEndSearch:

2.裝載和卸載tableview:

  • – searchDisplayController:didLoadSearchResultsTableView:

  • – searchDisplayController:willUnloadSearchResultsTableView:

3.顯示和隱藏tableview:

  • – searchDisplayController:willShowSearchResultsTableView:

  • – searchDisplayController:didShowSearchResultsTableView:

  • – searchDisplayController:willHideSearchResultsTableView:

  • – searchDisplayController:didHideSearchResultsTableView:

4.搜索條件改變時(shí)響應(yīng):

  • – searchDisplayController:shouldReloadTableForSearchString:  

  • – searchDisplayController:shouldReloadTableForSearchScope:

 

searchDisplayController 自身有一個searchResultsTableView,所以在執(zhí)行操作的時(shí)候首先要判斷是否是搜索結(jié)果的tableView,如果是顯示的就是搜索結(jié) 果的數(shù)據(jù),如果不是,是TableView自身的view,則需要顯示原始數(shù)據(jù)。

  if(tableView == self.searchDisplayController.searchResultsTableView)

    {

        arr = [self.filterContent valueForKey:key]; //搜索結(jié)果

    }

    else 

    {

        arr = [self.localresource valueForKey:key];  //原始數(shù)據(jù)

    }

 

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


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI