下面是我们要实现的效果。本效果是在上一篇自定义表视图的基础上进行更改的。http://ikrboy.iteye.com/blog/2004032
1.将Search bar and search display拖动到ViewController中。不要添加Search Bar.
2.修改ViewController的头文件
#import <UIKit/UIKit.h> @interface IkrboyViewController4 : UIViewController { NSArray *dataArr;//用于显示表视图的数据 NSArray *allDataArr;//存储所有数据,通过关键词搜索将搜索结果赋值给dataArr } @property (weak, nonatomic) IBOutlet UISearchBar *searchBar; @end
3.修改自定义方法initTableViewData。将ScopeBar隐藏是考虑到iphone的显示高度问题。可自行决定。
-(void)initTableViewData{ NSBundle *bundle = [NSBundle mainBundle]; NSString *plistPath = [bundle pathForResource:@"user_head" ofType:@"plist"]; allDataArr = [[NSArray alloc] initWithContentsOfFile:plistPath]; dataArr = [NSArray arrayWithArray:allDataArr]; NSLog(@"table data count = %d",[allDataArr count]); //设定搜索栏ScopeBar隐藏 [self.searchBar setShowsScopeBar:NO]; [self.searchBar sizeToFit]; }
4.添加SearchBar的三个事件触发
//以下三个方法实现SearchBar的搜索功能 //当文本内容发生改变时候,向表视图数据源发出重新加载消息 - (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { [self filterContentForSearchText:searchString scope:self.searchBar.selectedScopeButtonIndex]; //YES情况下表视图可以重新加载 return YES; } // 当Scope Bar选择发送变化时候,向表视图数据源发出重新加载消息 - (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption { [self filterContentForSearchText:self.searchBar.text scope:searchOption]; // YES情况下表视图可以重新加载 return YES; } //点击cancel按钮的事件 - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { //查询所有 [self filterContentForSearchText:@"" scope:-1]; }
5.自定义关键词搜索功能
//自定义搜索方法,根据关键词从allDataArr中搜索到满足搜索条件的元素,并将匹配的数组赋值给dataArr,由于dataArr是表视图的数据源,因此表视图的记录也会随之改变。 - (void)filterContentForSearchText:(NSString*)searchText scope:(NSUInteger)scope; { if([searchText length]==0) { //查询所有 dataArr = [NSArray arrayWithArray:allDataArr]; NSLog(@"dataArr count = %d",[dataArr count]); return; } NSPredicate *scopePredicate; switch (scope) { case 0: scopePredicate = [NSPredicate predicateWithFormat:@"(SELF.itemName contains[c] %@) OR (SELF.itemImagePath contains[c] %@)",searchText,searchText]; NSLog(@"searchText=%@",searchText); dataArr =[NSArray arrayWithArray:[allDataArr filteredArrayUsingPredicate:scopePredicate]]; break; case 1: scopePredicate = [NSPredicate predicateWithFormat:@"SELF.itemName contains[c] %@",searchText]; dataArr = [NSArray arrayWithArray:[allDataArr filteredArrayUsingPredicate:scopePredicate]]; break; case 2: scopePredicate = [NSPredicate predicateWithFormat:@"SELF.itemImagePath contains[c] %@",searchText]; dataArr =[NSArray arrayWithArray:[allDataArr filteredArrayUsingPredicate:scopePredicate]]; break; } }
6.修改cellForRowAtIndexPath方法
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"myTableCell"; MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; //add code begin:important,for showing searching results //不对cell进行空值的判断,会导致在搜索时,找不到对应identifier的cell而报错。 if (cell == nil) { //搜索结果采用简单表视图cell的style,并非自定义的表视图cell的style cell = [[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; NSUInteger row = [indexPath row]; NSDictionary *rowDict = [dataArr objectAtIndex:row]; cell.textLabel.text = [rowDict objectForKey:@"itemName"]; NSString *imagePath = [rowDict objectForKey:@"itemImagePath"]; cell.imageView.image = [UIImage imageNamed:imagePath]; } //add code end NSUInteger row = [indexPath row]; NSDictionary *rowDict = [dataArr objectAtIndex:row]; cell.label.text = [rowDict objectForKey:@"itemName"]; NSLog(@"cell.label.text = %@",[rowDict objectForKey:@"itemName"]); NSString *imagePath = [rowDict objectForKey:@"itemImagePath"]; cell.image.image = [UIImage imageNamed:imagePath]; NSLog(@"cell.image.image = %@",imagePath); cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; return cell; }
相关推荐
在iOS开发中,"IOS 带搜索栏表视图"是一个常见的功能需求,它能够为用户提供方便的数据筛选和查找体验。在这个实例中,我们关注的是`Search Bar and Search Display Controller`,而不是独立的`Search Bar`控件。`...
在iOS开发中,实现搜索功能是一项常见的任务,特别是在拥有大量数据需要展示的场景下,如表视图(UITableView)。这个“ios搜索功能的实现源码”提供了实例代码,可以帮助开发者理解并快速集成搜索功能到自己的应用...
总的来说,实现"iOS tableView点击更多 搜索栏"的功能涉及到UITableView的高级用法,包括自定义单元格行为、搜索过滤和用户交互处理。这要求开发者对iOS SDK有深入的理解,同时具备良好的编程实践。通过这个功能的...
首先,`tableView`的顶部视图通常指的是`tableHeaderView`,它可以用来放置一些额外的UI元素,如搜索栏、标签或者自定义视图。在这个案例中,顶部视图实现了下拉放大和上推渐变隐藏的效果,这是一种增强用户体验的...
在仿苹果地图搜索滑动视图中,滚动视图通常是主容器,用来承载地图视图和其他元素,如搜索栏、筛选选项等。滚动视图的两个主要属性是contentSize和contentOffset,contentSize定义了视图内容的总尺寸,而...
这个控制器包含了搜索栏(UISearchBar)和搜索结果展示视图,允许用户在应用内部进行实时搜索,并能处理显示搜索结果的逻辑。 在"slideDemo"项目中,开发者可能会演示如何设置和配置UISearchController。这包括设置...
本文将详细讲解如何在iOS 7中更改导航栏搜索框的取消按钮,并确保这种改变能够兼容iOS 6。 首先,我们需要了解在iOS中添加搜索框的基本步骤。这通常通过在导航栏上添加一个`UISearchBar`实例来实现。创建`...
4. **添加索引和搜索栏**:索引可以帮助用户快速浏览长列表,而UISearchBar可以提供搜索功能,方便用户查找特定内容。表视图可以通过实现相关方法添加这两项功能。 5. **Storyboard自定义单元格**:通过Storyboard...
"swift-一劳永逸iOS网页视图控制器通用类封装"项目就是针对这一需求,提供了一个通用的WebViewController类,旨在简化开发者的工作,提高代码复用性。 这个项目的核心是创建一个自定义的`SureWebViewController`,...
可以使用UIImage设置这些图标,并通过`setImage:`方法将其添加到搜索栏上。 3. **动画效果**:增加动态效果,如搜索框的出现、消失或展开收缩动画,能提升用户的交互体验。可以使用Core Animation或者SwiftUI的动画...
1. **UISearchBar**:这是iOS中最常见的搜索界面组件,通常用于顶部栏或者表视图的头部。开发者可以通过监听`UISearchBar`的`searchBar:textDidChange:`代理方法来实时处理用户的输入,并根据输入内容过滤数据源。 ...
在iOS开发中,仿照电商应用的搜索页面是一项常见的任务,因为这类页面是电商应用的核心功能之一,用户可以通过它快速找到所需的商品。本项目“ios-仿电商的搜索页面.zip”提供了一个实现这一功能的实例,包括历史...
UISearchController不仅包含了UISearchBar的功能,还管理了一个结果展示视图,可以无缝集成到导航栏或表视图中。开发者可以通过设置代理方法来响应用户的搜索请求,过滤数据源并更新显示的结果。 **拼音转Pinyin**...
本专题“iOS入门开发之导航栏按钮切换”将深入讲解如何在导航栏上创建并切换不同功能的按钮,帮助开发者更好地理解和实现这一功能。 一、导航栏基础 1. 导航栏在iOS中的角色:导航栏位于每个屏幕的顶部,通常包含一...
第十三部分:在表视图中添加搜索栏 第十四部分:如何在导航界面隐藏Tab Bar 第十五部分:Objective-C基础知识-介绍面向对象的编程 第十六部分:如何在你的iPhone App中发送邮件 第十七部分:持续改善Recipe App的...
游戏引擎之雷电游戏的激光子弹 指示器类 指示器(HUD)之Android Style Toast 指示器-Activity Bar 指示器--Notify HUD 指示器之MBAlertView 指示器之YLActivityIndicatorView 其他类 财付通打印票据和拖动银行卡...
- **添加搜索栏**:展示如何在表视图中添加搜索栏,并实现基本的搜索功能。 #### 第十四部分:如何在导航界面隐藏Tab Bar - **隐藏Tab Bar**:提供技巧来实现在特定的导航界面中隐藏Tab Bar。 #### 第十五部分:...
第十三部分:在表视图中添加搜索栏 第十四部分:如何在导航界面隐藏Tab Bar 第十五部分:Objective-C基础知识-介绍面向对象的编程 第十六部分:如何在你的iPhone App中发送邮件 第十七部分:持续改善Recipe App的...