`
jsntghf
  • 浏览: 2542636 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

UISearchDisplayController的使用

    博客分类:
  • iOS
阅读更多

(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`的核心概念。这个控制器主要由三部分组成:搜索栏...

    TabBar+Table+UISearchDisplayController

    - UISearchDisplayController还可以与`UISearchBar`结合使用,提供实时搜索建议,增强用户体验。 在"TabBar+Table+UISearchDisplayController"的应用中,通常的实现流程如下: 1. 创建一个`UITabBarController`...

    使用UISearchDisplayController显示搜索结果

    使用UISearchDisplayController显示搜索结果博客对应的Demo。 原文地址:http://blog.csdn.net/jymn_chen/article/details/24608097

    UISearchBar在UINavigationBar上的实现以及UISearchDisplayController的使用

    在UINavigationBar上显示UISearchBar, 并实现UISearchDisplayController功能的小Demo, 更多讲解在http://www.cnblogs.com/sely-ios/p/Sely.html

    UISearchDisplayController搜索.rar

    在"UISearchDisplayController搜索.rar"压缩包中,很可能包含了一些关于如何使用`UISearchDisplayController`进行开发的示例代码或教程。 `UISearchDisplayController`的主要特点和功能包括: 1. **自动管理界面**...

    IOS应用源码——UISearchDisplayController(搜索).zip

    在iOS应用开发中,...总之,通过研究这个源码,开发者不仅可以掌握UISearchDisplayController的使用,还能深入理解iOS应用中搜索功能的实现原理,为开发更加高效、用户友好的应用打下坚实的基础。

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

    在iOS应用开发中,UISearchDisplayController是一个非常重要的组件,它提供了一种优雅的方式来实现搜索功能,特别是与UITableView结合使用时。UISearchDisplayController管理着一个UISearchBar和一个单独的...

    ios UISearchDisplayController 实现 UITableView 搜索功能 - LeslieFang -

    下面将详细介绍如何使用UISearchDisplayController来实现UITableView的搜索功能。 首先,我们需要创建一个UISearchBar,这是用户输入搜索关键字的地方。在`viewDidLoad`方法中,可以实例化一个UISearchBar,并设置...

    IOS应用源码——TabBar+Table+UISearchDisplayController.rar

    3. 熟悉UISearchDisplayController的使用,了解如何与UISearchBar配合,实现实时搜索和结果展示。 4. 探索如何在实际项目中组织代码结构,提高代码复用性和可维护性。 总的来说,这个源码实例为iOS开发者提供了一个...

    IOS应用源码——UISearchDisplayController(搜索).rar

    在"UISearchDisplayController(搜索).rar"的源码中,我们可以看到如何配置和使用这些组件的实例。通过分析和运行代码,开发者可以更好地理解UISearchDisplayController的工作原理,并学习如何在自己的项目中实现...

    CoreDataSearchBarDemo:演示如何使用 NSFetchedResultsController 实现 UISearchDisplayController 来过滤核心数据对象

    演示如何使用 NSFetchedResultsController 实现 UISearchDisplayController 来过滤核心数据对象 ##要求 Xcode 6 iOS 7.0+ ##例子 ##Credits CoreDataSearchBarDemo 由创建 ##License ######MIT 许可证 (MIT)...

    UISearchController用法Demo

    在iOS开发中,UISearchController是苹果自iOS 8.0开始引入的一个强大的搜索组件,它取代了之前的UISearchDisplayController。UISearchController提供了一种更简洁、更易用的方式来集成搜索功能到你的应用程序中。这...

    UISearchController Demo

    在iOS开发中,UISearchController是苹果提供的一种用于实现搜索功能的高级API,它替代了之前的UISearchDisplayController和UISearchBar的组合。本教程将深入探讨`UISearchController`的相关知识点,帮助你理解和掌握...

    Sample-UISearchController:使用 UISearchController 演示的示例代码,在 iOS 8 中引入

    原始示例使用 UISearchDisplayController,它在 iOS 8 中已弃用。 每个选项卡都使用 UISearchController 以不同的方式显示搜索结果: 在表格视图中,非常类似于使用 UISearchDisplayController 在集合视图中 ...

    搜索列表,点击搜索框,显示灰色的背景

    在iOS应用开发中,"搜索列表,点击搜索框,显示灰色的背景"这一现象通常涉及到`UISearchBar`和`UISearchDisplayController`的使用。这两个是苹果提供的UI组件,用于实现用户界面中的搜索功能。在这里,我们将深入...

    iphone TabBar+Table+UISearchDisplayControlle

    它们通常结合使用,为用户提供高效、直观的交互体验。本示例着重于如何在iPhone应用中集成这些元素,实现一个功能完善的搜索功能。 `TabBar`是iOS中的底部导航栏,它允许用户在多个视图间轻松切换。每个TabBar项...

    显示iOS所有可用字体以及颜色

    这个程序框架利用了Apple的UIKit框架中的几个关键组件,如UINavigationController、UITabBarController、UITableViewController和UISearchDisplayController,来构建一个功能丰富的应用。下面将详细阐述这些知识点。...

    搜索框 plist文件使用 UISearchController

    它在iOS 8及更高版本中被引入,替代了之前的`UISearchBar`和`UISearchDisplayController`组合。`plist`文件是Property List的缩写,是iOS中用来存储数据的一种格式,通常用于配置或设置。在本主题中,“搜索框 plist...

    IOS搜索地名星座

    UISearchDisplayController是与UISearchBar配套使用的一个控制器,它管理着搜索界面的显示和隐藏,以及搜索结果的展示。它通常与UITableView一起使用,当用户开始搜索时,会显示一个包含搜索结果的表格视图。开发者...

    ios-基于 fmdb 的基本操作.zip

    在示例中,你提到了使用`UISearchBar`和`UISearchDisplayController`进行混合使用,这通常用于实现搜索功能。你可以动态构造SQL语句,根据用户输入的关键字进行筛选: ```objc NSString *query = [NSString ...

Global site tag (gtag.js) - Google Analytics