UISearchController使用

效果图1

效果图2

其实一般是在第一种情况使用的UISearchController,但是第二种情况这种又懒得去用uisearchbar+uitableview等等去处理,

其实主要是对数据源的合理使用即可

UISearchController通常是用来排查数据的,比如当前的uitableviewcontroller有许多数据,排查之后需要更新显示数据。

首先UISearchController是联通主cntroller与结果controller桥梁

在主controller建立UISearchController对象

@interface UIViewControllerLocation ()
{
    UISearchController* searchController0;
}

那么如何联通主controller

  [self.searchBar addSubview:searchController0.searchBar];

以上代码需要理解的是searchController0.searchBar是一个只读属性,所以不能被assign,

self.searchBar是一个view

/**
 *  搜索框
 */
@property (weak, nonatomic) IBOutlet UIView *searchBar;
  不能够直接使用self.searchBar=searchController0.searchBar;只有tableview.tableHeaderView=searchController0.searchBar才有效果,同样是view不知道为什么

那么如何联通结果controller

@interface UIViewControllerLocation ()
{
    SearchResult* searchResult;
}
    searchResult=[SearchResult new];
    searchController0=[[UISearchController alloc] initWithSearchResultsController:searchResult];
SearchResult是一个uitableviewcontroller然后是主controller作为了结果controller的数据更新者
    searchController0.searchResultsUpdater=self;

需要遵循一个代理

@interface UIViewControllerLocation : UIViewController<UISearchResultsUpdating>

然后

     //设置活跃性为YES否则需要自行推送结果controller
    searchController0.active=YES;

那么主controller如何推送数据到 结果 controller

代理

/**
 *  当搜索框开始改变时触发
 *
 *  @param searchController
 */
-(void)updateSearchResultsForSearchController:(nonnull UISearchController *)searchController
{
    searchResult.getResult(@[@70,@71,@72,@73,@74,@75]);
}

结果controller需要处理接受到的数据(使用的block)

#import <UIKit/UIKit.h>
#import "NSObjectDataSource.h"
/**
 *  获取数据
 *
 *  @param idData
 */
typedef void (^GetResult)(id idData);
@interface SearchResult : UIViewController
/**
 *  获取数据的block
 */
@property(nonatomic,copy)GetResult getResult;
/**
 *  查询数据列表
 */
@property (weak, nonatomic) IBOutlet UITableView *tabelview;
/**
 *  tableview的datasource代理
 */
@property(nonatomic,retain)NSObjectDataSource* dataSource;
@end

主controller里初始化结果controller的获取数据block

    SearchResult*__weak weakSearchResult=searchResult;
    searchResult.getResult=^(NSArray* array)
    {
        weakSearchResult.dataSource.nsArrayModels=array;
        [weakSearchResult.tabelview reloadData];
    };

在主controller里搜索更新时执行就可以了(只传递最终数据,数据的筛选需要自行处理)

 
时间: 2024-10-25 01:08:42

UISearchController使用的相关文章

iOS UISearchController的使用

在iOS9中,UISearchDisplayController 已经被UISearchController替代.搜索框是一种常用的控件. 假设我们要满足下图的需求,产生100个“数字+三个随机字母”,然后搜索包含某个字母的结果. 那么,该怎么做呢? #import "ViewController.h" @interface ViewController ()<UITableViewDelegate,UITableViewDataSource,UISearchController

iOS UISearchController 搜索框

#import <Foundation/Foundation.h> @interface Student : NSObject @property(strong,nonatomic) NSString *name; @property(strong,nonatomic) NSString *pic; @property(strong,nonatomic) NSString *tel; -(Student *)initWithDic:(NSDictionary *)dic; +(Student

UISearchController

搜索框UISearchController的使用(iOS8.0以后替代UISearchBar + UIS) 1.在iOS 8.0以上版本中, 我们可以使用UISearchController来非常方便地在UITableView中添加搜索框. 而在之前版本中, 我们还是必须使用UISearchBar + UISearchDisplayController的组合方式. 2.在使用UISearchController前先定义以下属性 //定义一个UISearchController @property

iOS --- 搜索框UISearchController的使用(iOS8.0以后替代UISearchBar + UISearchDisplayController的组合)

在iOS 8.0以上版本中, 我们可以使用UISearchController来非常方便地在UITableView中添加搜索框. 而在之前版本中, 我们还是必须使用UISearchBar + UISearchDisplayController的组合方式. 添加UISearchController属性: @property(strong, nonatomic) UISearchController *searchController; @property(strong, nonatomic) NS

iOS - Swift UISearchController仿微信搜索框

0x01.创建一个UISearchController 如果传入的searchController为nil,则表示搜索的结果在当前控制器中显示,现在我让它在searchVC中显示. // 创建searchResultVC let searchVC = UIViewController() // 设置背景颜色为红色 searchVC.view.backgroundColor = UIColor.red let searchController = UISearchController(search

iOS之iPhone手机通讯录和短信搜索界面的实现以及UISearchController和UISearchDisplayController的浅析

本来觉得这个模块也就是一个SearchBar就搞定了,但是现在的产品经理也是够了,一会儿一个想法,之前的搜索 都已经写完了,类似主流的电商,好像也没那么麻烦,但是改版了总得弄点什么吧.嘿,哥们,我现在要iphone手机 通讯录里面搜索的样式,你搞定哦......,要一毛一样哦.作为一个文化人,我只能在内心深处生 出表达出,苦逼的我们顶多发发牢骚,要改就改喽. 请看图先 这是他要的效果demo 下面是我写的demo 看到这效果,应该都能想到用UISearchController,但是这货是iOS8

UITableView的搜索:SearchBar和SearchDisplayController;UISearchController

之前我写过一篇关于在tableView中利用谓词搜索的随笔,当时使用的是自定义textField,最近在写电子书,需要在书目时实现搜索功能.所以在此把以前用于实现搜索功能系统提供的的SearchBar和SearchDisplayController的方法在这里和大家分享一下.不过在iOS8滞后,苹果已经不再推荐我们是使用这两个旧东西,而是让我们使用UISearchController,自然我也会把这个新东西的用法在这里演示一下. SearchBar和SearchDisplayController

UISearchController 的大坑

UISearchBar+UISearchDisplayController这个组合的稳定性经过几次iOS版本迭代肯定不言而喻,但苹果爸爸就是任性的在iOS8.0中宣布弃用UISearchDisplayController,推荐开发者使用UISearchController.虽然没有找到官方或者大神的明确解释,但是在使用过程中的确发现了一些不足之处,不过笔者是用了倒推法.一开始就采用UISearchController是实现搜索功能,然后偶然发现iOS8.4版本中UISearchControlle

iOS中的2中搜索方式UISearchDisplayController和UISearchController

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 以前iOS的搜索一般都使用UISearchDisplayController来完成,不过自从iOS 8.0开始,该控制器被标记为废弃,我们可以在iOS 8.0之后使用一个新的搜索控制器UISearchController来完成搜索. 本篇博文将介绍以上2种搜索控制器的简单用法,并比较它们的区别.Let't Go! UISearchDisplayControll

UISearchController 很坑

最近一个项目用到了很多搜索 踩了一大波坑 还要继续踩下去 直接上代码了 <UISearchControllerDelegate,UISearchResultsUpdating> //声明 @property (nonatomic,retain) UISearchController *searchController; - (void)createUI{ self.searchController = [[UISearchController alloc]initWithSearchResul