一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - IOS - iOS應用中UISearchDisplayController搜索效果的用法

iOS應用中UISearchDisplayController搜索效果的用法

2021-01-07 15:26頤和園 IOS

這篇文章主要介紹了iOS應用中UISearchDisplayController搜索效果的用法,包括點擊搜索出現黑條問題的解決方法,代碼基于傳統的Objective-C,需要的朋友可以參考下

新建navigation-based project。打開.xib文件,拖一個search bar and search displaycontroller 對象到table view對象上方,如下圖所示,選中file's owner ,打開connections面板:

iOS應用中UISearchDisplayController搜索效果的用法

現在我們來創建search bar和searchdisplay controller的出口。打開assistant editor,按住ctrl鍵,將searchdisplay controller拖到viewcontroller 的頭文件中。創建一個名為searchdisplaycontroller的出口,然后點connect。

iOS應用中UISearchDisplayController搜索效果的用法

同樣的方法為search bar創建連接。現在viewcontroller的頭文件看起來像這樣:

復制代碼 代碼如下:


#import <uikit/uikit.h>

 

@interface rootviewcontroller : uitableviewcontroller {   

uisearchdisplaycontroller *searchdisplaycontroller;     uisearchdisplaycontroller *searchbar;   

nsarray *allitems;   

nsarray *searchresults;

@property (nonatomic, retain) iboutlet uisearchdisplaycontroller *searchdisplaycontroller;

@property (nonatomic, retain) iboutlet uisearchdisplaycontroller *searchbar;

@property (nonatomic, copy) nsarray *allitems;

@property (nonatomic, copy) nsarray *searchresults; 

@end


你可能注意到,我初始化了兩個nsarray。一個用于作為數據源,一個用于保存查找結果。在本文中,我使用字符串數組作為數據源。繼續編輯.m文件前,別忘了synthesize相關屬性:

 

  • @synthesize searchdisplaycontroller;

  • @synthesize searchbar;

  • @synthesize allitems;

  • @synthesize searchresults;

在viewdidload 方法中,我們構造了我們的字符串數組:

 

復制代碼 代碼如下:

 

 

- (void)viewdidload {

     [super viewdidload]; 

     // [self.tableview reloaddata];

     self.tableview.scrollenabled = yes;

      nsarray *items = [[nsarray alloc] initwithobjects:                       @"code geass",                       @"asura cryin'",                       @"voltes v",                       @"mazinger z",                       @"daimos",                       nil]; 

     self.allitems = items;

     [items release]; 

     [self.tableview reloaddata];

}


在table view的返回tableview行數的方法中,我們先判斷當前table view是否是searchdisplaycontroller的查找結果表格還是數據源本來的表格,然后返回對應的行數:

復制代碼 代碼如下:


- (nsinteger)tableview:(uitableview *)tableview   numberofrowsinsection:(nsinteger)section { 

 

  nsinteger rows = 0;   

  if ([tableview           isequal:self.searchdisplaycontroller.searchresultstableview]){     

    rows = [self.searchresults count];

 }else{    

    rows = [self.allitems count];   

 }   

  return rows;

}


在tableview:cellforrowatindexpath:方法里,我們需要做同樣的事:

復制代碼 代碼如下:


// customize the appearance of table view cells.

 

- (uitableviewcell *)tableview:(uitableview *)tableview           cellforrowatindexpath:(nsindexpath *)indexpath {

   static nsstring *cellidentifier = @"cell";  

   uitableviewcell *cell = [tableview                               dequeuereusablecellwithidentifier:cellidentifier];

   if (cell == nil) { 

      cell = [[[uitableviewcell alloc]                   initwithstyle:uitableviewcellstyledefault                   reuseidentifier:cellidentifier] autorelease];   

      cell.accessorytype = uitableviewcellaccessorydisclosureindicator;

   }  

   /* configure the cell. */

   if ([tableview isequal:self.searchdisplaycontroller.searchresultstableview]){   

    cell.textlabel.text = [self.searchresults objectatindex:indexpath.row];

   }else{

       cell.textlabel.text = [self.allitems objectatindex:indexpath.row];

   }  

   return cell;

}


現在來實現當搜索文本改變時的回調函數。這個方法使用謂詞進行比較,并講匹配結果賦給searchresults數組:

復制代碼 代碼如下:


- (void)filtercontentforsearchtext:(nsstring*)searchtext                               scope:(nsstring*)scope {

 

   nspredicate *resultpredicate = [nspredicate                                      predicatewithformat:@"self contains[cd] %@",                                     searchtext];  

   self.searchresults = [self.allitems filteredarrayusingpredicate:resultpredicate];

}


接下來是uisearchdisplaycontroller的委托方法,負責響應搜索事件:

復制代碼 代碼如下:


#pragma mark - uisearchdisplaycontroller delegate methods

 

-(bool)searchdisplaycontroller:(uisearchdisplaycontroller *)controller  shouldreloadtableforsearchstring:(nsstring *)searchstring {

   [self filtercontentforsearchtext:searchstring                                 scope:[[self.searchdisplaycontroller.searchbar scopebuttontitles]                                       objectatindex:[self.searchdisplaycontroller.searchbar                                                      selectedscopebuttonindex]]]; 

   return yes;

- (bool)searchdisplaycontroller:(uisearchdisplaycontroller *)controller  shouldreloadtableforsearchscope:(nsinteger)searchoption {

   [self filtercontentforsearchtext:[self.searchdisplaycontroller.searchbar text]                                 scope:[[self.searchdisplaycontroller.searchbar scopebuttontitles]                                       objectatindex:searchoption]]; 

   return yes;

}


運行工程,當你在搜索欄中點擊及輸入文本時,如下圖所示:

 

iOS應用中UISearchDisplayController搜索效果的用法

 


uisearchdisplaycontroller 點擊搜索出現黑條問題解決方案
如果點擊按鈕啟動 presentviewcontroller 的時候出現下圖效果:

iOS應用中UISearchDisplayController搜索效果的用法

比如說我這里現在代碼式這樣寫的:

復制代碼 代碼如下:

addfriendviewcontroller *addfriendvc = [[addfriendviewcontroller alloc] init]; 
   uinavigationcontroller *nav =[[uinavigationcontroller alloc] initwithrootviewcontroller:addfriendvc]; 
   [self presentviewcontroller:nav animated:yes completion:nil]; 
   [addfriendvc release]; 
   [nav release]; 


發現問題所在 uinavigationcontroller 的背景顏色是黑色的;
 
為了解決tableview點擊搜索出現的黑條:

 

代碼:

復制代碼 代碼如下:

addfriendviewcontroller *addfriendvc = [[addfriendviewcontroller alloc] init]; 
    uinavigationcontroller *nav =[[uinavigationcontroller alloc] initwithrootviewcontroller:addfriendvc]; 
    [nav.view setbackgroundcolor:uicolorfromrgb(0xc6c6cb)]; 
    [self presentviewcontroller:nav animated:yes completion:nil]; 
    [addfriendvc release]; 
    [nav release]; 


改變了nav的背景色:

復制代碼 代碼如下:

[nav.view setbackgroundcolor:uicolorfromrgb(0xc6c6cb)];


效果:

 

iOS應用中UISearchDisplayController搜索效果的用法

延伸 · 閱讀

精彩推薦
  • IOSiOS中UILabel實現長按復制功能實例代碼

    iOS中UILabel實現長按復制功能實例代碼

    在iOS開發過程中,有時候會用到UILabel展示的內容,那么就設計到點擊UILabel復制它上面展示的內容的功能,也就是Label長按復制功能,下面這篇文章主要給大...

    devilx12792021-04-02
  • IOSiOS開發之視圖切換

    iOS開發之視圖切換

    在iOS開發中視圖的切換是很頻繁的,獨立的視圖應用在實際開發過程中并不常見,除非你的應用足夠簡單。在iOS開發中常用的視圖切換有三種,今天我們將...

    執著丶執念5272021-01-16
  • IOSiOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)

    iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和

    這篇文章主要介紹了iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)的相關資料,需要的朋友可以參考下...

    CodingFire13652021-02-26
  • IOSiOS實現控制屏幕常亮不變暗的方法示例

    iOS實現控制屏幕常亮不變暗的方法示例

    最近在工作中遇到了要將iOS屏幕保持常亮的需求,所以下面這篇文章主要給大家介紹了關于利用iOS如何實現控制屏幕常亮不變暗的方法,文中給出了詳細的...

    隨風13332021-04-02
  • IOSiOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果的相關資料,需要的朋友可以參考下...

    jiangamh8882021-01-11
  • IOS詳解iOS中多個網絡請求的同步問題總結

    詳解iOS中多個網絡請求的同步問題總結

    這篇文章主要介紹了詳解iOS中多個網絡請求的同步問題總結,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    liang199111302021-03-15
  • IOSiOS開發技巧之狀態欄字體顏色的設置方法

    iOS開發技巧之狀態欄字體顏色的設置方法

    有時候我們需要根據不同的背景修改狀態欄字體的顏色,下面這篇文章主要給大家介紹了關于iOS開發技巧之狀態欄字體顏色的設置方法,文中通過示例代碼...

    夢想家-mxj8922021-05-10
  • IOSiOS中MD5加密算法的介紹和使用

    iOS中MD5加密算法的介紹和使用

    MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數字字母混合碼。對輸入信息生成唯一的128位散列值(32個字符)。這篇文...

    LYSNote5432021-02-04
主站蜘蛛池模板: 国产成人啪精品午夜在线播放 | 北条麻妃黑人正在播放 | 亚洲精品久久啪啪网站成年 | 国产美女下面流出白浆视频 | 国产成人在线免费视频 | 精品一区二区三区波多野结衣 | 99国产高清久久久久久网站 | 日本免费高清在线 | 欧美日韩综合网在线观看 | 男人好大好硬好爽免费视频 | 九二淫黄大片看片 | 7788av| 草莓香蕉榴莲丝瓜秋葵绿巨人在线看 | 秋霞宅宅236理论片 秋霞一级黄色片 | 欧美黑人成人免费全部 | 日本老熟老太hd | 草草在线视频 | 精品视频免费 | 九九九九在线视频播放 | 吉泽明步高清无码中文 | 美女脱得一二净无内裤全身的照片 | 欧美日韩人成在线观看 | 色综合天天综合网站中国 | 91精品国产免费久久 | 成人快插| 摔跤成人黄版 | 兽皇日本 | 亚洲成人免费 | 精品无人区麻豆乱码无限制 | 99爱在线观看精品视频 | 日本在线视频播放 | 近亲乱中文字幕 | fistingvideos头交尿眼 | 精品国产品国语在线不卡丶 | 波多野结衣在线免费观看 | 免费被黄网站在观看 | 国产欧美精品一区二区三区 | 99撸| 国产精品久久久久久吹潮 | 久久成人免费大片 | 亚洲午夜精品久久久久久成年 |