您的位置:首页 > 产品设计 > UI/UE

iOS开发基础 - UISearchController

2016-03-25 10:48 561 查看
基本属性设置(一般依附于UITableView)

self.searchCon = [[UISearchController alloc] initWithSearchResultsController:nil];

//设置代理
self.searchCon.searchResultsUpdater = self;
//自适应
[self.searchCon.searchBar sizeToFit];
//点击搜索条隐藏导航条
self.searchCon.hidesNavigationBarDuringPresentation = NO;
//是否隐藏灰色半透明背景
self.searchCon.dimsBackgroundDuringPresentation = NO;
//把搜索条作为表头
self.tableView.tableHeaderView = self.searchCon.searchBar;

//在同一个tableView上实现搜索显示结果 进行下面的设置
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
//active是不是活跃状态
if (self.searchCon.active) {
return self.searchArr.count;
}
return self.dataArr.count;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"id" forIndexPath:indexPath];

if (self.searchCon.active){
cell.textLabel.text = self.searchArr[indexPath.row];
}
else{
cell.textLabel.text = self.dataArr[indexPath.row];
}
return cell;
}

//当每次点击搜索框 每次输入字符时 都将实时调用这个方法
-(void)updateSearchResultsForSearchController:(UISearchController *)searchController{
[self.searchArr removeAllObjects];
NSLog(@"A");

/*方法1
for (NSString * str in self.dataArr) {
NSRange range = [str rangeOfString:self.searchCon.searchBar.text];

//如果能找到 就存储到searchArr里面
if (range.location != NSNotFound) {
[self.searchArr addObject:str];
}
}
*/

//谓词 筛选数据的条件 就像数据库语法 可以过滤/查找某段范围的数据
NSPredicate * predict = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"SELF CONTAINS[c] '%@'",self.searchCon.searchBar.text]];

NSArray * arr = [self.dataArr filteredArrayUsingPredicate:predict];
//将查询结果 存储到搜索数组里
[self.searchArr addObjectsFromArray:arr];
[self.tableView reloadData];

//    str为正则表达式
//    NSPredicate * pre = [NSPredicate predicateWithFormat:@"SELF MATHES %@",str];
//    BOOL b = [pre evaluateWithObject:@"要判断的字符串"];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: