廢話不多說了,直接給大家貼代碼了。
具體代碼如下所示:
#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實現搜索及上拉加載,下拉刷新實例代碼,希望對大家有所幫助!