iOS开发之UITableView与UISearchController实现搜索及上拉加载,下拉刷新实例代码
作者:甘林梦
这篇文章主要介绍了iOS开发之UITableView与UISearchController实现搜索及上拉加载,下拉刷新实例代码的相关资料,需要的朋友可以参考下
废话不多说了,直接给大家贴代码了。
具体代码如下所示:
#import "ViewController.h" #import "TuanGouModel.h" #import "TuanGouTableViewCell.h" #define kDeviceWidth [UIScreen mainScreen].bounds.size.width #define kDeviceHeight [UIScreen mainScreen].bounds.size.height @interface ViewController ()<UITableViewDelegate,UITableViewDataSource,UISearchResultsUpdating> { UISearchController * _sscller; } @property(nonatomic,strong)NSMutableArray* secArrM; @property(nonatomic,strong) NSMutableArray* tuanGouArrM; @property(nonatomic,strong)UITableView* myTable; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [self createNa]; self.myTable.backgroundColor = [UIColor lightGrayColor]; [self createsecB]; [self setupRefresh]; self.title = @"美食家"; } #pragma mark - 导航 -(void)createNa{ UIBarButtonItem *rightItem = [[UIBarButtonItem alloc]initWithTitle:@"Edit" style:UIBarButtonItemStylePlain target:self action:@selector(tableEdit:)]; self.navigationItem.rightBarButtonItem = rightItem; self.title = @"美食家"; } // 点击导航右侧编辑按钮时,让表格可编辑 -(void)tableEdit:(UIBarButtonItem *) btnItem{ // if (self.myTable.editing == NO ) { // 没有处于编辑状态,导航按钮文字为“Edit” // // 点击“编辑”文字,让表格处于编辑状态,并把按钮的文字修改为“Done" // self.myTable.editing = YES; // // }else{ // // 编辑状态下,点击”Done"按钮,取消表格的编辑状态,修改导航按钮文字为"Edit" // self.myTable.editing = NO; // btnItem.title = @"Edit" ; // self.navigationItem.rightBarButtonItems = @[btnItem]; // } } -(void)createsecB{ _sscller = [[UISearchController alloc]initWithSearchResultsController:nil]; _sscller.searchResultsUpdater = self; self.myTable.tableHeaderView = _sscller.searchBar; } -(NSMutableArray *)secArrM{ if (_secArrM == nil) { return _secArrM = [NSMutableArray array]; }else{ return _secArrM; } } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } #pragma mark - 表格懒加载 -(UITableView *)myTable{ if (_myTable == nil) { _myTable = [[UITableView alloc]initWithFrame:CGRectMake(, , kDeviceWidth, kDeviceHeight) style:UITableViewStylePlain]; [self.view addSubview:_myTable]; _myTable.delegate = self; _myTable.dataSource = self; _myTable .separatorStyle = UITableViewCellSeparatorStyleSingleLineEtched; } return _myTable; } #pragma mark - 团购数据懒加载 -(NSMutableArray *)tuanGouArrM{ if (_tuanGouArrM == nil) { _tuanGouArrM = [NSMutableArray array]; NSString* plistPath = [[NSBundle mainBundle]pathForResource:@"tgs.plist" ofType:nil]; NSArray* tuanArr = [NSArray arrayWithContentsOfFile:plistPath]; for (NSDictionary* dict in tuanArr) { TuanGouModel* model =[[TuanGouModel alloc]initWithDict:dict]; [_tuanGouArrM addObject:model]; } } return _tuanGouArrM; } #pragma mark - 数据源协议 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ if ( _sscller.active ) { //搜索结果表格 return self.secArrM.count; } else{ return self.tuanGouArrM.count; } } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ //注册 [tableView registerClass:[TuanGouTableViewCell class] forCellReuseIdentifier:@"tuanCell"]; //重置 TuanGouTableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"tuanCell"forIndexPath:indexPath]; cell.backgroundColor = [UIColor yellowColor]; // 选中风格 cell.selectionStyle = UITableViewCellSelectionStyleNone; if( !_sscller.active ){ cell.tuanGouModel = self.tuanGouArrM[indexPath.row]; }else{ //搜索结果 cell.tuanGouModel = self.secArrM[indexPath.row]; } return cell; } #pragma mark - TableV协议 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return ; } -(void)updateSearchResultsForSearchController:(UISearchController *)searchController{ [self.secArrM removeAllObjects]; for (int j = ; j < _tuanGouArrM.count; j++) { TuanGouModel* model =[[TuanGouModel alloc]init]; model = _tuanGouArrM[j]; if ([model.title isEqualToString: _sscller.searchBar.text]) { [self.secArrM addObject: model]; } } [self.myTable reloadData]; } //允许Menu菜单 -(BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath { return YES; } //每个cell都可以点击出现Menu菜单 -(BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender { return YES; } -(void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender{ NSLog(@"长按"); if (action ==@selector(copy:)) { NSLog(@"copy"); } if (action ==@selector(cut:)) { NSLog(@"cut"); } if (action ==@selector(paste:)) { NSLog(@"paste"); } if (action ==@selector(selectAll:)) { NSLog(@"selectAll"); } } //上拉加载 -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ if (indexPath.row == self.tuanGouArrM.count - ) { NSLog(@"最后一行"); TuanGouModel* model =[[TuanGouModel alloc]init]; model = _tuanGouArrM[arcrandom()%]; [_tuanGouArrM addObject:model]; [self.myTable reloadData]; } } //下拉刷新 -(void)setupRefresh { //.添加刷新控件 UIRefreshControl *control=[[UIRefreshControl alloc]init]; [control addTarget:self action:@selector(refreshStateChange:) forControlEvents:UIControlEventValueChanged]; [self.myTable addSubview:control]; //.马上进入刷新状态,并不会触发UIControlEventValueChanged事件 [control beginRefreshing]; // .加载数据 [self refreshStateChange:control]; } /** * UIRefreshControl进入刷新状态:加载最新的数据 */ -(void)refreshStateChange:(UIRefreshControl *)control { TuanGouModel* model =[[TuanGouModel alloc]init]; model = _tuanGouArrM[arcrandom()%]; [_tuanGouArrM insertObject:model atIndex:]; [self.myTable reloadData]; NSLog(@"第一行"); [control endRefreshing]; } //指示是否允许高亮显示选中的行 - (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath{ return YES; } //选中某行时执行 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ NSLog(@"selected: %ld, row:%ld", indexPath.section, indexPath.row); } //取消选中时执行,这个方法常在表格允许多选时调用执行 - (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{ NSLog(@"Deselected: %ld, row:%ld", indexPath.section, indexPath.row); }
以上代码是hi小编给大家介绍的iOS开发之UITableView与UISearchController实现搜索及上拉加载,下拉刷新实例代码,希望对大家有所帮助!