废话不多说了,直接给大家贴代码了。

具体代码如下所示:

#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 ()

{

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实现搜索及上拉加载,下拉刷新实例代码,希望对大家有所帮助!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐