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
最終的顯示結果:索引