搜索栏8.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];
}

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

时间: 2024-10-13 20:22:05

搜索栏8.0以后的的相关文章

鬃嘴释怀说太多就成真不了。

子阻撞砖奏尊仔籽着 释怀说太多就成真不了. http://passport.baidu.com/?business&un=vip&un=%E5%A4%A9%E6%B0%B4%E4%B8%8A%E9%97%A8%E8%BF%99%E5%B0%8F%E5%A7%90#0 http://passport.baidu.com/?business&un=vip&un=%E7%99%BD%E9%93%B6%E4%B8%8A%E9%97%A8%E8%BF%99%E5%B0%8F%E5%A

澜星粘鼐贩逊耐盼系甭妊倏纪傲傲sdfghjk

http://passport.baidu.com/?business&un=R&un=%E5%A4%A7%E5%AE%81%E6%A1%91%E6%8B%BF%E9%80%9A%E5%B0%8F%E5%A7%90#0 http://passport.baidu.com/?business&un=R&un=%E4%B9%A1%E5%AE%81%E6%A1%91%E6%8B%BF%E9%80%9A%E5%B0%8F%E5%A7%90#0 http://passport.bai

在Ubuntu14.04上OpenStack Juno安装部署

在Ubuntu14.04上OpenStack Juno安装部署 0 安装方式 0.1 安装方式 安装方式 说明 目标 备注 单结点 一台服务器运行所有的nova-xxx组件,同时也驱动虚拟实例. 这种配置只为尝试Nova,或者为了开发目的进行安装.   1控制节点+N个计算节点 一个控制结点运行除nova-compute外的所有nova-services,然后其他compute结点运行nova-compute.所有的计算节点需要和控制节点进行镜像交互,网络交互,控制节点是整个架构的瓶颈. 这种配

2008 SCI 影响因子(Impact Factor)

Excel download 期刊名缩写 影响因子 ISSN号 CA-CANCER J CLIN 74.575 0007-9235 NEW ENGL J MED 50.017 0028-4793 ANNU REV IMMUNOL 41.059 0732-0582 NAT REV MOL CELL BIO 35.423 1471-0072 PHYSIOL REV 35.000 0031-9333 REV MOD PHYS 33.985 0034-6861 JAMA-J AM MED ASSOC 3

搜索栏UISearchBar和UISearchController(UISearchDisplayController在iOS8.0之后就不推荐使用)

iOS中UISearchDisplayController用于搜索,搜索栏的重要性我们就不说了,狼厂就是靠搜索起家的,现在越来越像一匹没有节操的狼,UC浏览器搜 索栏现在默认自家的神马搜索,现在不管是社交,O2O还是在线教育等都会有一个搜索栏的实现,不过彼此实现效果是不一样的.iOS中的搜索栏实现起来相对 简单一点,网上也有很多参考资料,不过靠谱的不是很多,很多都是iOS 8.0之前的实现,iOS 8.0上的实现貌似很少看到,可以运行,不过会看到searchDisplayController'

【Javaweb】前台开发环境的配置Myeclipse6.5+JDK1.6+Tomcat6.0+SVN1.8

Javaweb开发环境的配置也是比较繁琐的一件事情,虽然理论上使用记事本,完全可以写出一个Javaweb工程, 但是在团队大型开发的Javaweb过程中,你必须配置好Eclipse.SVN.Tomcat与JDK1.6,当然还有Mysql数据库,不过数据库配置的事情属于后台内容,本文仅讨论前台开发环境的配置. 之所以选择Myeclipse6.5是因为其他高版本的Myeclipse实在是太卡,编辑小型程序还好,编辑大型程序完全吃不消,Eclipse的功能毕竟简陋,所以还是选择了旧版本.经典版本Mye

表视图搜索栏

一.效果 1. 启动程序:上面搜索栏.右边索引条 2. 点击表单元有警告框提示 3. 点击搜索栏输入内容可根据长短范围搜索 二.分析 1. 创建一个表视图,指定委托,实现表单元的显示 2. 创建一个显示搜索结果的模型,该模型也是表视图,遵循搜索结果更新协议,作为更新器 3. 创建一个搜索控制器,指定搜索结果控制器,并创建搜索栏,让搜索结果控制器实现同步更新协议,让搜索到的内容得以在搜索结果中更新 4. 在更新协议实现方法中配置搜索的逻辑 三.实现 1. 实现文件 2. Main.storyboa

iOS开发-搜索栏UISearchBar和UISearchController

搜索栏的重要性我们就不说了,狼厂就是靠搜索起家的,现在越来越像一匹没有节操的狼,UC浏览器搜索栏现在默认自家的神马搜索,现在不管是社交,O2O还是在线教育等都会有一个搜索栏的实现,不过彼此实现效果是不一样的.iOS中的搜索栏实现起来相对简单一点,网上也有很多参考资料,不过靠谱的不是很多,很多都是iOS 8.0之前的实现,iOS 8.0上的实现貌似很少看到,看了一些老外的代码,使用了一下UISearchController感觉还是非常不错的. UISearchBar和UIDisplayContro

MDIEMDIE双心封装版0.3.0.0 RC6V2

MDIEMDIE双心封装版0.3.0.0 RC6V2官方主页:http://cres.s28.xrea.com/ 下载地址:http://files.cnblogs.com/files/liuzhaoyzz/MDIE%E5%8F%8C%E5%BF%83%E5%B0%81%E8%A3%85%E7%89%880.3.0.0RC6V2.rarMDIE(多文档界面资源管理器)是一个MDI类型的文件管理软件,是代替资源管理器的一个无比强悍的文件管理器 .他支持VBS和JS插件扩展,提供了无限可能.他支持鼠