码迷,mamicode.com
首页 > 其他好文 > 详细

搜索栏8.0以后的

时间:2015-09-28 21:00:36      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:

/*

UITableView的搜索功能
1.设置索引
索引方法,要求索引元素的个数与分区的个数一致 (NSArray *)sectionIndexTitlesForTableView
哪个索引不能点击,-(NSInteger)tableview: sectionForSectionIndexTitle
2.在UITableView头上放搜索框
3.UISearchDisplayController
4.显示搜索结果

*/

-------------------------------------------------------------------------------------------------------------

//
//  MyTableViewController.h
//  UITableView-2-SearchOld
//
//  Created by qianfeng on 15/9/28.
//  Copyright (c) 2015年 qianfeng. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MyTableViewController : UITableViewController<UISearchResultsUpdating,UISearchBarDelegate>

@end

-------------------------------------------------------------------------------------------------------------

//
//  MyTableViewController.m
//  UITableView-2-SearchOld
//
//  Created by qianfeng on 15/9/28.
//  Copyright (c) 2015年 qianfeng. All rights reserved.
//

#import "MyTableViewController.h"
#import "SearchResultTableViewController.h"

@interface MyTableViewController ()
//数据源
@property (nonatomic) NSMutableArray *dataArr;
//搜索控制器
@property (nonatomic)UISearchController *scc;
//搜索结果
@property (nonatomic) NSMutableArray *searchResult;
@property (nonatomic) NSMutableArray *sectionHeadArr;
@end

@implementation MyTableViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self customNaviItem];
    [self createDataSource];
    [self createSearchBar];
}

#pragma mark - 定制导航Item
- (void)customNaviItem
{
    //设置标题
    self.navigationItem.title = @"联系人";
}

#pragma mark - 创建数据源
- (void)createDataSource
{
    self.dataArr = [[NSMutableArray alloc]init];
    
    for (int i = ‘A‘; i<=‘Z‘; i++) {
        NSMutableArray *arr = [[NSMutableArray alloc] init];
        for (int j = 0 ; j<10; j++) {
            NSString * str = [NSString stringWithFormat:@"%c%c%c%c",i, arc4random()%26+‘A‘, arc4random()%26+‘A‘, arc4random()%26+‘A‘];
            [arr addObject:str];
        }
        [self.dataArr addObject:arr];
    }
    //段头的数据
    self.sectionHeadArr = [[NSMutableArray alloc]init];
    
    for (int k = ‘A‘; k<=‘Z‘; k++) {
        NSString *str = [NSString stringWithFormat:@"%c",k];
        [self.sectionHeadArr addObject:str];
    }
}

#pragma mark - 创建搜索栏
- (void)createSearchBar
{
    //创建SearchResultTableViewController视图控制器
    SearchResultTableViewController * srtvc = [[SearchResultTableViewController alloc] init];
    //—scc是搜索控制器
    _scc = [[UISearchController alloc] initWithSearchResultsController:srtvc];
//    [sc.searchBar sizeToFit];
    _scc.searchBar.frame = CGRectMake(0, 0, self.view.frame.size.width, 40);
    //设置表头为searchBar,下一个界面的searchBar
    self.tableView.tableHeaderView = _scc.searchBar;
    //设置大写
    _scc.searchBar.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;
    //设置代理
    _scc.searchResultsUpdater = self;
    _scc.searchBar.delegate = self;
    self.definesPresentationContext = YES;
    _scc.active = YES;
}

#pragma mark - 搜索结果更新协议
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController
{
    if (self.searchResult == nil) {
        self.searchResult = [[NSMutableArray alloc]init];
    }else{
        //清除上一次的搜索结果
        [self.searchResult removeAllObjects];
    }
    
    for (NSArray *arr in self.dataArr) {
        for (NSString *name in arr) {
            //AABB   A
            NSRange range = [name rangeOfString:searchController.searchBar.text];
            if (range.location != NSNotFound) {
                [self.searchResult addObject:name];
            }
        }
    }
    SearchResultTableViewController *svc = (id)searchController.searchResultsController;
    svc.resultArr = self.searchResult;
    //刷新数据
    [svc.tableView reloadData];
}

#pragma mark - Table view data source
//------------------------------------------------------
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return self.dataArr.count;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [self.dataArr[section] count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell2" ];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell2"];
    }
    if (self.tableView == tableView) {
        cell.textLabel.text = self.dataArr[indexPath.section][indexPath.row];
    }
    return cell;
}
//------------------------------------------------------
#pragma mark    ------------------------段头段尾设置
//------------------------------------------------------
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return self.sectionHeadArr[section];
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 30;
}
//------------------------------------------------------

#pragma mark    ------------------------索引
- (NSArray*)sectionIndexTitlesForTableView:(UITableView *)tableView
{
    //注 索引和段保持一致
    return self.sectionHeadArr;
}

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{
    if (index == 2) {
        return -1;
    }
    return index;
}
@end
-------------------------------------------------------------------------------------------------------------

//
//  SearchResultTableViewController.h
//  UITableView-2-SearchNew
//
//  Created by qianfeng on 15/9/28.
//  Copyright (c) 2015年 qianfeng. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface SearchResultTableViewController : UITableViewController

@property (nonatomic) NSMutableArray *resultArr;

@end
-------------------------------------------------------------------------------------------------------------

#import "SearchResultTableViewController.h"

@interface SearchResultTableViewController ()

@end

@implementation SearchResultTableViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor orangeColor];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return self.resultArr.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell3"];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell3"];
    }
    cell.textLabel.text = self.resultArr[indexPath.row];
    return cell;
}

@end
-------------------------------------------------------------------------------------------------------------

在MyTableViewController(一)创建数据源,导航栏,段头段尾等。

在SearchResultTableViewController(二)正常创建显示三个方法

主要在一中创建数据源和搜索栏还有更新协议

#pragma mark - 创建搜索栏
- (void)createSearchBar
{
    //创建SearchResultTableViewController视图控制器
    SearchResultTableViewController * srtvc = [[SearchResultTableViewController alloc] init];//初始化一个二
    //—scc是搜索控制器
    _scc = [[UISearchController alloc] initWithSearchResultsController:srtvc];//搜索控制器用一个srtvc来初始化
//    [sc.searchBar sizeToFit];
    _scc.searchBar.frame = CGRectMake(0, 0, self.view.frame.size.width, 40);//设置frame
    //设置表头为searchBar,下一个界面的searchBar
    self.tableView.tableHeaderView = _scc.searchBar;//把搜索控制器对象放在表头
    //设置大写
    _scc.searchBar.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;
    //设置代理
    _scc.searchResultsUpdater = self;
    _scc.searchBar.delegate = self;
    self.definesPresentationContext = YES;
    _scc.active = YES;
}

#pragma mark - 搜索结果更新协议
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController
{
    if (self.searchResult == nil) {
        self.searchResult = [[NSMutableArray alloc]init];
    }else{
        //清除上一次的搜索结果
        [self.searchResult removeAllObjects];
    }
    
    for (NSArray *arr in self.dataArr) {
        for (NSString *name in arr) {
            //AABB   A

    //searchController.searchBar.text就是在搜索栏中的输入,比较name根它有没有一样的,加入self.searchResult中
            NSRange range = [name rangeOfString:searchController.searchBar.text];
            if (range.location != NSNotFound) {
                [self.searchResult addObject:name];
            }
        }
    }

  //取得第二个里边的SearchResultTableViewController,刷新显示
    SearchResultTableViewController *svc = (id)searchController.searchResultsController;
    svc.resultArr = self.searchResult;
    //刷新数据
    [svc.tableView reloadData];
}

技术分享

 

技术分享

 

上边的橘色就是在第二个页面中的,不是第一个页面

搜索栏8.0以后的

标签:

原文地址:http://www.cnblogs.com/wanghengheng/p/4844905.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!