廢話不多說了,直接給大家貼代碼了。
具體代碼如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
|
# 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實現搜索及上拉加載,下拉刷新實例代碼,希望對大家有所幫助!