(1)SOLAddLocationViewController.h
#import <UIKit/UIKit.h> @interface SOLAddLocationViewController : UIViewController <UISearchDisplayDelegate, UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate> @end
(2)SOLAddLocationViewController.m
#import "SOLAddLocationViewController.h" #pragma mark - SOLAddLocationViewController Class Extension @interface SOLAddLocationViewController () // Results of a search @property (strong, nonatomic) NSMutableArray *searchResults; @property (strong, nonatomic) NSMutableArray *allCitys; @property (strong, nonatomic) NSArray *dataList; // Location search results display controller @property (strong, nonatomic) UISearchDisplayController *searchController; // -------- // Subviews // -------- // Location search bar @property (strong, nonatomic) UISearchBar *searchBar; // Navigation bar at the top of the view @property (strong, nonatomic) UINavigationBar *navigationBar; // Done button inside navigation bar @property (strong, nonatomic) UIBarButtonItem *doneButton; @property (strong, nonatomic) UITableView *mTableView; @end #pragma mark - SOLAddLocationViewController Implementation @implementation SOLAddLocationViewController - (void)viewDidLoad { self.view.backgroundColor = [UIColor clearColor]; self.view.opaque = NO; self.mTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 64, 320, 480) style:UITableViewStyleGrouped]; self.mTableView.delegate = self; self.mTableView.dataSource = self; [self.mTableView setContentSize:CGSizeMake(320, 3000)]; [self.view addSubview:self.mTableView]; self.searchResults = [[NSMutableArray alloc]initWithCapacity:5]; self.navigationBar = [[UINavigationBar alloc]initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 64)]; [self.view addSubview:self.navigationBar]; self.doneButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed)]; // Inititalize and configure search bar self.searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 20, self.view.bounds.size.width, 44)]; self.searchBar.autocorrectionType = UITextAutocorrectionTypeNo; self.searchBar.placeholder = @"搜索城市"; self.searchBar.delegate = self; // Initialize and configure search controller self.searchController = [[UISearchDisplayController alloc]initWithSearchBar:self.searchBar contentsController:self]; self.searchController.delegate = self; self.searchController.searchResultsDelegate = self; self.searchController.searchResultsDataSource = self; self.searchController.displaysSearchBarInNavigationBar = YES; self.searchController.navigationItem.rightBarButtonItems = @[self.doneButton]; self.navigationBar.items = @[self.searchController.navigationItem]; NSString *path = [[NSBundle mainBundle]pathForResource:@"Provinces" ofType:@"plist"]; self.dataList = [NSMutableArray arrayWithContentsOfFile:path]; self.allCitys = [NSMutableArray arrayWithCapacity:0]; } #pragma mark UIViewController Methods - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleDefault animated:NO]; [self.searchController setActive:YES animated:NO]; [self.searchController.searchBar becomeFirstResponder]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent animated:NO]; [self.searchController setActive:NO animated:NO]; [self.searchController.searchBar resignFirstResponder]; } #pragma mark DoneButton Methods - (void)doneButtonPressed { } #pragma mark UISearchDisplayControllerDelegate 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; } - (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView { [tableView setFrame:CGRectMake(0, CGRectGetHeight(self.navigationBar.bounds), CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds) - CGRectGetHeight(self.navigationBar.bounds))]; tableView.separatorStyle = UITableViewCellSeparatorStyleNone; tableView.delegate = self; [self.view bringSubviewToFront:self.navigationBar]; } - (void)filterContentForSearchText:(NSString *)searchText scope:(NSString *)scope { NSMutableArray *searchResult = [[NSMutableArray alloc] initWithCapacity:0]; for(int i = 0; i < [self.allCitys count]; i++) { NSString *str = [self.allCitys objectAtIndex:i]; if([str rangeOfString:searchText].location != NSNotFound) [searchResult addObject:str]; } self.searchResults = [NSArray arrayWithArray:searchResult]; } #pragma mark UITableViewDelegate Methods - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellIdentifier = @"CellIdentifier"; // Dequeue cell UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if(!cell) { cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; } // Configure cell for the search results table view if(tableView == self.searchController.searchResultsTableView) cell.textLabel.text = self.searchResults[indexPath.row]; else cell.textLabel.text = self.dataList[indexPath.section][@"Citys"][indexPath.row][@"C_Name"]; return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if(tableView == self.searchController.searchResultsTableView) { [tableView cellForRowAtIndexPath:indexPath].selected = NO; // code } } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { if(tableView == self.searchController.searchResultsTableView) return 1; else return [self.dataList count]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if(tableView == self.searchController.searchResultsTableView) return [self.searchResults count]; else { NSArray *cityArray = self.dataList[section][@"Citys"]; for(int i = 0; i < [cityArray count]; i++) { NSString *Name = cityArray[i][@"C_Name"]; if (![self.allCitys containsObject:Name]) [self.allCitys addObject:Name]; } return [cityArray count]; } } - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { NSString *HeaderName; if(tableView == self.searchController.searchResultsTableView) HeaderName = @"搜索结果"; else HeaderName = self.dataList[section][@"p_Name"]; return HeaderName; } @end
(3)效果图
相关推荐
在本篇文章中,我们将深入探讨`UISearchDisplayController`的工作原理、使用方法以及如何将其有效地整合到你的应用中。 首先,我们来看`UISearchDisplayController`的核心概念。这个控制器主要由三部分组成:搜索栏...
- UISearchDisplayController还可以与`UISearchBar`结合使用,提供实时搜索建议,增强用户体验。 在"TabBar+Table+UISearchDisplayController"的应用中,通常的实现流程如下: 1. 创建一个`UITabBarController`...
使用UISearchDisplayController显示搜索结果博客对应的Demo。 原文地址:http://blog.csdn.net/jymn_chen/article/details/24608097
在UINavigationBar上显示UISearchBar, 并实现UISearchDisplayController功能的小Demo, 更多讲解在http://www.cnblogs.com/sely-ios/p/Sely.html
在"UISearchDisplayController搜索.rar"压缩包中,很可能包含了一些关于如何使用`UISearchDisplayController`进行开发的示例代码或教程。 `UISearchDisplayController`的主要特点和功能包括: 1. **自动管理界面**...
在iOS应用开发中,...总之,通过研究这个源码,开发者不仅可以掌握UISearchDisplayController的使用,还能深入理解iOS应用中搜索功能的实现原理,为开发更加高效、用户友好的应用打下坚实的基础。
在iOS应用开发中,UISearchDisplayController是一个非常重要的组件,它提供了一种优雅的方式来实现搜索功能,特别是与UITableView结合使用时。UISearchDisplayController管理着一个UISearchBar和一个单独的...
下面将详细介绍如何使用UISearchDisplayController来实现UITableView的搜索功能。 首先,我们需要创建一个UISearchBar,这是用户输入搜索关键字的地方。在`viewDidLoad`方法中,可以实例化一个UISearchBar,并设置...
3. 熟悉UISearchDisplayController的使用,了解如何与UISearchBar配合,实现实时搜索和结果展示。 4. 探索如何在实际项目中组织代码结构,提高代码复用性和可维护性。 总的来说,这个源码实例为iOS开发者提供了一个...
在"UISearchDisplayController(搜索).rar"的源码中,我们可以看到如何配置和使用这些组件的实例。通过分析和运行代码,开发者可以更好地理解UISearchDisplayController的工作原理,并学习如何在自己的项目中实现...
演示如何使用 NSFetchedResultsController 实现 UISearchDisplayController 来过滤核心数据对象 ##要求 Xcode 6 iOS 7.0+ ##例子 ##Credits CoreDataSearchBarDemo 由创建 ##License ######MIT 许可证 (MIT)...
在iOS开发中,UISearchController是苹果自iOS 8.0开始引入的一个强大的搜索组件,它取代了之前的UISearchDisplayController。UISearchController提供了一种更简洁、更易用的方式来集成搜索功能到你的应用程序中。这...
在iOS开发中,UISearchController是苹果提供的一种用于实现搜索功能的高级API,它替代了之前的UISearchDisplayController和UISearchBar的组合。本教程将深入探讨`UISearchController`的相关知识点,帮助你理解和掌握...
原始示例使用 UISearchDisplayController,它在 iOS 8 中已弃用。 每个选项卡都使用 UISearchController 以不同的方式显示搜索结果: 在表格视图中,非常类似于使用 UISearchDisplayController 在集合视图中 ...
在iOS应用开发中,"搜索列表,点击搜索框,显示灰色的背景"这一现象通常涉及到`UISearchBar`和`UISearchDisplayController`的使用。这两个是苹果提供的UI组件,用于实现用户界面中的搜索功能。在这里,我们将深入...
它们通常结合使用,为用户提供高效、直观的交互体验。本示例着重于如何在iPhone应用中集成这些元素,实现一个功能完善的搜索功能。 `TabBar`是iOS中的底部导航栏,它允许用户在多个视图间轻松切换。每个TabBar项...
这个程序框架利用了Apple的UIKit框架中的几个关键组件,如UINavigationController、UITabBarController、UITableViewController和UISearchDisplayController,来构建一个功能丰富的应用。下面将详细阐述这些知识点。...
它在iOS 8及更高版本中被引入,替代了之前的`UISearchBar`和`UISearchDisplayController`组合。`plist`文件是Property List的缩写,是iOS中用来存储数据的一种格式,通常用于配置或设置。在本主题中,“搜索框 plist...
UISearchDisplayController是与UISearchBar配套使用的一个控制器,它管理着搜索界面的显示和隐藏,以及搜索结果的展示。它通常与UITableView一起使用,当用户开始搜索时,会显示一个包含搜索结果的表格视图。开发者...
在示例中,你提到了使用`UISearchBar`和`UISearchDisplayController`进行混合使用,这通常用于实现搜索功能。你可以动态构造SQL语句,根据用户输入的关键字进行筛选: ```objc NSString *query = [NSString ...