• 人民网评:让军人成为全社会最尊崇的职业 2019-10-17
  • 新规:续航150公里以下新能源车取消补贴 2019-10-11
  • 法国革命时代,女人流行穿什么 2019-10-11
  • 黑龙江省县(市、区)委统战部长培训班举办 2019-10-06
  • “夏季第一瓜”竟是它! 2019-10-06
  • 《阿古顿巴》藏语版在藏语卫视首播 2019-09-06
  • 晋中市“三同步”推动互联网治理创新 2019-08-27
  • 法媒:研究称美国人常用药物或增加抑郁风险 2019-08-27
  • 宝贝是地名,你能想到这么浪漫的地名在哪儿吗? 2019-08-15
  • 何树山副省长到方圆机电调研指导工作 2019-08-15
  • 山东体彩11选5最新开奖:UISearchDisplayController 的使用

    来源:本网整理

    彩票双色球历史开奖结果 www.s9h6.com 原文地址: //ygamretuta.me/2011/08/10/ios-implementing-a-basic-search-uisearchdisplaycontroller-and-interface-builder/

     

    今天,我会演示如何在iOS中实现本地搜索。代码是在苹果官方教程的基础上修改而来的。

    新建Navigation-based Project。打开.xib文件,拖一个Search Bar and Search DisplayController 对象到Table View对象上方,如下图所示,选中File’s Owner ,打开Connections面板:

    现在我们来创建Search Bar和SearchDisplay Controller的出口。打开Assistant Editor,按住ctrl键,将SearchDisplay Controller拖到ViewController 的头文件中。创建一个名为searchDisplayController的出口,然后点Connect。

    同样的方法为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;

    }

    运行工程,当你在搜索栏中点击及输入文本时,如下图所示:

    文章出处://blog.csdn.net/kmyhy/article/details/7049556

  • 本文相关:
  • 如何解散modalViewController的modalViewController
  • 在iPhone上实现简单Http服务
  • 隐藏 iPhone 软键盘的另一种方法
  • 关于一个交叉引用Bug:“can not find interface declaration”
  • 自定义Tab Bar控件
  • 关于libXml的一点小问题
  • iPad开发:UISplitViewController应用
  • 自定义 iOS 导航栏上的返回按钮
  • ld: library not found for -lgcc_s.10.5错误的解决
  • 用 GHUnit 运行 ASIHttpRequest 的测试案例
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 彩票双色球历史开奖结果 - 频道导航
    Copyright © 2017 彩票双色球历史开奖结果 www.s9h6.com All Rights Reserved
  • 人民网评:让军人成为全社会最尊崇的职业 2019-10-17
  • 新规:续航150公里以下新能源车取消补贴 2019-10-11
  • 法国革命时代,女人流行穿什么 2019-10-11
  • 黑龙江省县(市、区)委统战部长培训班举办 2019-10-06
  • “夏季第一瓜”竟是它! 2019-10-06
  • 《阿古顿巴》藏语版在藏语卫视首播 2019-09-06
  • 晋中市“三同步”推动互联网治理创新 2019-08-27
  • 法媒:研究称美国人常用药物或增加抑郁风险 2019-08-27
  • 宝贝是地名,你能想到这么浪漫的地名在哪儿吗? 2019-08-15
  • 何树山副省长到方圆机电调研指导工作 2019-08-15
  • 牛牛qq群 山东七乐彩走势图 百度贵州11选5 北京pk10买9个号吗 体育福建31选7走势图 二肖中特精准资料34期 福彩总汇预测 体彩 彩票客户端 天津十一选五推荐号码 2019年香港内部透码A 爱彩乐天津快乐十分 p3最近10期试机号 黑龙江新时时彩走势图表 秒速飞艇人工全天计划