UITableView詳解

  ios開發中,UITableView是很是很是重要的UI控件,熟練了解它的各個經常使用屬性方法頗有必要。 ios

  經常使用方法: atom

 #pragma mark - DataSource
 #pragma mark 每組多少行
 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 
 #pragma mark 每組顯示的內容,當出如今屏幕上得時候才加載此方法
 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  
 #pragma mark 有多少組
 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
 
 #pragma mark 組的頭部的文字
 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
 
 #pragma mark 組的尾部文字
 - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
 
 #pragma mark 右邊索引文字
 - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView

 #pragma mark 編輯行(添加 刪除)
 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

 #pragma mark 移動行
 - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath

 #pragma mark - Delegate
 #pragma mark 每行的高度
 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

 #pragma mark 組的頭部高度
 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

 #pragma mark 組的尾部高度
 - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section

 #pragma mark 自定義頭部View
 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

 #pragma mark 自定義尾部View
 - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section

 #pragma mark 選中行
 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

#pragma mark 編輯模式默認是刪除 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

#pragma mark - 刷新數據
#pragma mark 刷新全局數據
[self.tableView reloadData];

#pragma mark 刷新刪除數據
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:<#UITableViewRowAnimation#>]

#pragma mark 刷新插入數據
[tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:<#UITableViewRowAnimation#>]

#pragma mark 設置行的高度
[self.tableView setRowHeight:]

#pragma mark 設置tableView頂部的View, 經常使用來作頂部圖片輪播
[self.tableView setTableHeaderView:]

#pragma mark 設置tableView底部的View, 經常使用來作底部上拉加載更多
[self.tableView setTableFooterView]

 

  下面用一個小例子說明:spa

  1 @interface WYSViewController ()
  2 
  3 @property (nonatomic,strong) NSMutableArray *dataList;
  4 
  5 @end
  6 
  7 @implementation WYSViewController
  8 
  9 - (void)viewDidLoad
 10 {
 11     [super viewDidLoad];
 12     
 13     
 14     // 開啓編輯模式,開啓後不能選中行
 15     // self.tableView.editing = YES;
 16     
 17     // tableHeaderView定義的View, 經常使用來作頂部輪播圖片
 18     [self tableHeaderViewData];
 19     
 20     // tableFooterView定義的View, 經常使用來作底部上拉加載更多
 21     [self tableFooterViewData];
 22 }
 23 
 24 #pragma mark - tableHeaderView定義的View
 25 - (void)tableHeaderViewData
 26 {
 27     UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 80)];
 28     [view setBackgroundColor:[UIColor redColor]];
 29     
 30     UILabel *lab = [[UILabel alloc] initWithFrame:CGRectMake(30, 20, 250, 30)];
 31     [lab setText:@"tableHeaderView定義的View"];
 32     
 33     [view addSubview:lab];
 34     self.tableView.tableHeaderView = view;
 35 }
 36 
 37 #pragma mark - tableFooterView定義的View
 38 - (void)tableFooterViewData
 39 {
 40     UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 80)];
 41     [view setBackgroundColor:[UIColor yellowColor]];
 42     
 43     UILabel *lab = [[UILabel alloc] initWithFrame:CGRectMake(30, 20, 250, 30)];
 44     [lab setText:@"tableFooterView定義的View"];
 45     
 46     [view addSubview:lab];
 47     self.tableView.tableFooterView = view;
 48 }
 49 
 50 #pragma mark - 加載數據
 51 - (NSMutableArray *)dataList
 52 {
 53     if (_dataList == nil){
 54         
 55 //        NSArray *arrayM = @[@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10"];
 56 //        _dataList = [NSMutableArray arrayWithArray:arrayM];
 57         
 58         _dataList = [NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5", nil];
 59     }
 60     
 61     
 62     return _dataList;
 63 }
 64 
 65 #pragma mark - DataSource
 66 #pragma mark 每組多少行
 67 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 68 {
 69     
 70     NSLog(@"每組多少行");
 71     
 72     return [self.dataList count];
 73 
 74 }
 75 
 76 #pragma mark 每組顯示的內容,當出如今屏幕上得時候才加載此方法
 77 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 78 {
 79     
 80     NSLog(@"每行顯示的內容");
 81     
 82     static NSString *ID = @"cellID";
 83     
 84     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
 85     
 86     if (cell == nil){
 87         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
 88     }
 89     
 90     
 91     [cell.textLabel setText:self.dataList[indexPath.row]];
 92     
 93     return cell;
 94     
 95     
 96 }
 97 
 98 #pragma mark 有多少組
 99 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
100 {
101     
102     NSLog(@"有多少組");
103     
104     return 1;
105     
106     
107 }
108 
109 #pragma mark 組的頭部的文字
110 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
111 {
112     NSLog(@"我是組頭部文字");
113     
114     return @"我是組的頭部文字";
115     
116 }
117 
118 #pragma mark 組的尾部文字
119 - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
120 {
121 
122     NSLog(@"我是組尾部文字");
123     
124     return @"我是組的尾部文字";
125 
126 }
127 
128 
129 #pragma mark 右邊索引文字
130 - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
131 {
132     return @[@"1",@"2",@"3",@"4",@"5"];
133 }
134 
135 
136 #pragma mark 編輯行(添加 刪除)
137 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
138 {
139     
140     NSLog(@"編輯模式");
141     
142     if (editingStyle == UITableViewCellEditingStyleDelete){
143         
144         [self.dataList removeObjectAtIndex:indexPath.row];
145         
146         [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];
147         
148         // 全局刷新
149         //[tableView reloadData];
150         
151     }else{
152         
153         [self.dataList insertObject:@"good" atIndex:indexPath.row + 1];
154         
155         NSIndexPath *path = [NSIndexPath indexPathForRow:indexPath.row + 1 inSection:indexPath.section];
156         
157         [tableView insertRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationFade];
158     }
159 }
160 
161 
162 #pragma mark 移動行
163 - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
164 {
165     
166     NSLog(@"移動行");
167     
168     id source = self.dataList[sourceIndexPath.row];
169     [self.dataList removeObjectAtIndex:sourceIndexPath.row];
170     
171     [self.dataList insertObject:source atIndex:destinationIndexPath.row];
172 }
173 
174 #pragma mark - Delegate
175 #pragma mark 每行的高度
176 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
177 {
178     NSLog(@"每行的高度");
179     
180     return 60;
181 }
182 
183 #pragma mark 組的頭部高度
184 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
185 {
186     NSLog(@"組的頭部高度");
187     
188     return 50;
189 }
190 
191 #pragma mark 組的尾部高度
192 - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
193 {
194     NSLog(@"組的尾部高度");
195     
196     return 50;
197 }
198 
199 #pragma mark 自定義頭部View
200 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
201 {
202     NSLog(@"自定義頭部View");
203     UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
204     [view setBackgroundColor:[UIColor greenColor]];
205     
206     UILabel *lab = [[UILabel alloc] initWithFrame:CGRectMake(20, 10, 250, 30)];
207     [lab setText:@"ViewForHeader定義的View"];
208     
209     [view addSubview:lab];
210     return view;
211 }
212 
213 #pragma mark 自定義尾部View
214 - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
215 {
216     NSLog(@"自定義尾部view");
217     
218     UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
219     [view setBackgroundColor:[UIColor orangeColor]];
220     UILabel *lab = [[UILabel alloc] initWithFrame:CGRectMake(20, 10, 250, 30)];
221     [lab setText:@"ViewForFooter定義的View"];
222     
223     [view addSubview:lab];
224     return view;
225 }
226 
227 #pragma mark 選中行
228 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
229 {
230     NSLog(@"選中行");
231     
232     // 取消行的選定
233     [tableView deselectRowAtIndexPath:indexPath animated:YES];
234 }
235 
236 #pragma mark 編輯模式默認是刪除
237 - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
238 {
239     return indexPath.row % 2 ? UITableViewCellEditingStyleInsert : UITableViewCellEditingStyleDelete;
240 }
241 
242 
243 @end

 

打印結果:code

2015-03-24 13:04:15.244 tableView01[3197:c07] 有多少組
2015-03-24 13:04:15.249 tableView01[3197:c07] 組的頭部高度
2015-03-24 13:04:15.251 tableView01[3197:c07] 組的頭部高度
2015-03-24 13:04:15.256 tableView01[3197:c07] 組的尾部高度
2015-03-24 13:04:15.258 tableView01[3197:c07] 組的尾部高度
2015-03-24 13:04:15.262 tableView01[3197:c07] 每組多少行
2015-03-24 13:04:15.264 tableView01[3197:c07] 每行的高度
2015-03-24 13:04:15.267 tableView01[3197:c07] 每行的高度
2015-03-24 13:04:15.271 tableView01[3197:c07] 每行的高度
2015-03-24 13:04:15.273 tableView01[3197:c07] 每行的高度
2015-03-24 13:04:15.276 tableView01[3197:c07] 每行的高度
2015-03-24 13:04:15.282 tableView01[3197:c07] 有多少組
2015-03-24 13:04:15.284 tableView01[3197:c07] 組的頭部高度
2015-03-24 13:04:15.286 tableView01[3197:c07] 組的頭部高度
2015-03-24 13:04:15.290 tableView01[3197:c07] 組的尾部高度
2015-03-24 13:04:15.292 tableView01[3197:c07] 組的尾部高度
2015-03-24 13:04:15.294 tableView01[3197:c07] 每組多少行
2015-03-24 13:04:15.297 tableView01[3197:c07] 每行的高度
2015-03-24 13:04:15.300 tableView01[3197:c07] 每行的高度
2015-03-24 13:04:15.308 tableView01[3197:c07] 每行的高度
2015-03-24 13:04:15.309 tableView01[3197:c07] 每行的高度
2015-03-24 13:04:15.310 tableView01[3197:c07] 每行的高度
2015-03-24 13:04:15.313 tableView01[3197:c07] 每行顯示的內容
2015-03-24 13:04:15.316 tableView01[3197:c07] 每行顯示的內容
2015-03-24 13:04:15.318 tableView01[3197:c07] 每行顯示的內容
2015-03-24 13:04:15.326 tableView01[3197:c07] 每行顯示的內容
2015-03-24 13:04:15.328 tableView01[3197:c07] 每行顯示的內容
2015-03-24 13:04:15.329 tableView01[3197:c07] 自定義頭部View
2015-03-24 13:04:15.332 tableView01[3197:c07] 自定義尾部view

 說明,這些方法的調用順序爲:blog

#pragma mark 有多少組
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
#pragma mark 組的頭部高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
#pragma mark 組的尾部高度
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
#pragma mark 每組多少行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
#pragma mark 每行的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
#pragma mark 每組顯示的內容,當出如今屏幕上得時候才加載此方法
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

 

最終的顯示結果:索引

相關文章
相關標籤/搜索