ios8以后的搜索栏

来源:互联网 发布:画画软件手机版 编辑:程序博客网 时间:2024/06/04 21:43

在重新看以前的入门书时,发现很多API在ios8以后都弃用了。今天是涉及到搜索栏。

在官方文档中可以看到,UISearchDisplayController连同UISearchDisplayDelegate在ios8以后被弃用了,以后用UISearchController替代。

@interface ViewController : UIViewController < UITableViewDelegate , UITableViewDataSource ,UISearchBarDelegate , UISearchResultsUpdating >

@property(nonatomic , retain )   NSArray *recipes;// 源数据

@property(nonatomic , retain )   NSMutableArray *searchList;// 用于保存搜索结果的数组

@property(nonatomic , retain )   IBOutlet UITableView *tableview;

@property(nonatomic , retain )   UISearchController *sC; // 本来叫searchController的,但与后面有个方法里的参数重名了 ,遂改成这个2B名字

@end



-(void) viewDidLoad{

……

sC =  [ [ UISearchController alloc ] initWithSearchResultsController : nil ];

sC.searchResultsUpdater = self;

sC.dimsBackgroundDuringPresentation = NO;// 这两个属性也可改为YES

sC.hidesNavigationBarDuringPresentation = NO;

sC.searchBar.frame = CGRectMake ( sC.searchBar.frame.origin.x , sC.searchBar.frame.origin.y , sC.searchBar.frame.size.width , 44.0) ;

tableview.tableHeaderView = sC.searchBar;// 是用代码添加的搜索栏,在故事板中拖控件拉线拉不上……

}


-numberOfRowsInsection{

if ( sC.active ){// 新版的不再是对tableview做判断,直接用active属性

return [ searchList count ] ; 

}else {

return [ recipes count ] ;

}

}


-cellForRowAtIndexPath{

……

if ( sC.active ){

cell.textLabel.text = [ searchList objectAtIndex : indexPath.row ] ; 

}else{

cell.textLabel.text = [ recipes objectAtIndex : indexPath.row ];

}

return cell;

}


-prepareForSegue{

if ( [ segue.identifier isEqualToString:@"showRecipeDetail" ] ){

RecipeViewController *destViewController = segue.destinationViewControlelr;

NSIndexPath *indexPath = [ tableview indexPathForSelectedRow ] ;

if( sC.active ){

destViewController.recipeName = [ searchList objectAtIndex:indexPath.row ] ;  // 不然选择的结果会出错

}else{

destViewController.recipeName = [ recipes objectAtIndex:indexPath.row ] ;

}

]

}


-updateSearchResultsForSearchController{

NSString *searchString = [ searchController.searchBar text ] ;

NSPredicate *predicate = [ NSPredicate predicateWithFormat:@"SELF CONTAINS [cd] %@",searchString ] ;

if( searchList != nil ){

[ searchList removeAllObjects ] ;

}

searchList = [ NSMutableArray arrayWithArray: [ recipes filteredArrayUsingPredicate:predicate ] ] ;

[ tableview reloadData ] ;

}


拖控件的暂时没搞清楚怎么写






原创粉丝点击