iOS基礎:UITableView簡單使用
阿新 • • 發佈:2018-12-29
一、UITableView的建立
2.cell的建立
3.獲取固定的cell
6.重新整理
//tableView初始化用此方法
-(instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style;
self.tableV.editing = !self.tableV.editing;//是否允許編輯
self.tableV.allowsMultipleSelectionDuringEditing = !self.tableV.allowsMultipleSelectionDuringEditing;//是否允許多選
//給tableView設定背景View self.tableV.backgroundView = [[UIImageView alloc]initWithImage:[self getImageFromMainImagesDirectoryWithImageName:@"nonews"]]; self.tableV.backgroundView.contentMode = UIViewContentModeCenter;
//設定tableView是否可以滾動
self.tableV.scrollEnabled = NO;
二、UITableView的代理方法
//幾個區 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1; } //每個區內幾個cell -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return 1; } //cell的預估高度 -(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath{ return 44.0f; } //cell的實際高度 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ //返回UITableViewAutomaticDimension時cell的高度是自適應高度 //需要與預估高度配合使用 return UITableViewAutomaticDimension; } //cell的具體設定 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString * ID = @"cell"; UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:ID]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:0 reuseIdentifier:ID]; } return cell; }
//選中 在多選狀態下選中也會呼叫
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if (self.tableV.editing) {
[self.selectArr addObject:indexPath];
}
}
//反選 在多選狀態下反選也會呼叫 -(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{ if (!self.tableV.editing) { [self.selectArr removeObject:indexPath]; } }
//長按向左滑動cell
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"長按向左滑動");
return UITableViewCellEditingStyleDelete;
}
//點選刪除或減號或加號時會呼叫這個方法
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
NSLog(@"點選刪除按鈕");
[self.dataArr removeObjectAtIndex:indexPath.row];
[self.tableV reloadData];
}
//拖動cell完成的時候會呼叫
-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath{
NSLog(@"源:%@ 目標%@ ",sourceIndexPath,destinationIndexPath);
#if 0
if( sourceIndexPath.row<destinationIndexPath.row){
[self.dataArr insertObject:self.dataArr[sourceIndexPath.row] atIndex:destinationIndexPath.row+1];
[self.dataArr removeObjectAtIndex:sourceIndexPath.row];
}
else{
[self.dataArr insertObject:self.dataArr[sourceIndexPath.row] atIndex:destinationIndexPath.row];
[self.dataArr removeObjectAtIndex:sourceIndexPath.row+1];
}
#elif 1
id x = self.dataArr[sourceIndexPath.row];
[self.dataArr removeObject:x];
[self.dataArr insertObject:x atIndex:destinationIndexPath.row];
//[self.dataArr exchangeObjectAtIndex:sourceIndexPath.row withObjectAtIndex:destinationIndexPath.row];
#endif
[self.tableV reloadData];
}
三、其它重要方法
1.cell的提前註冊
//註冊cell
[self.tabelView registerClass:[MYCell class] forCellReuseIdentifier:@"id"];
//註冊cell 有xib檔案的cell
[self.tableView registerNib:[UINib nibWithNibName:@"CustomCell" bundle:nil] forCellReuseIdentifier:@"id"];
//建立cell 顯示內容
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
#if 0
//1.設定重用識別符號
static NSString *cellID = @"id";
//2.依據重用識別符號 從重用池裡面獲取cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
//3.判斷cell是否存在
if (!cell) {
//4.如果不存在 建立cell
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
//如果使用系統的UITableViewCell 在cell上新增子控制元件的時候 需要在這個判斷裡建立、新增
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(100, 40, 100, 40)];
label.backgroundColor = [UIColor redColor];
//在cell上新增子控制元件 需要新增到cell得contentView上
[cell.contentView addSubview:label];
label.tag = 100;
}
//4.讓cell顯示資料
cell.textLabel.text = @"資料";
//cell上子控制元件顯示資料一定要在判斷外
UILabel *subLabel = (id)[cell viewWithTag:100];
subLabel.text = @"顯示資料";
//5.返回cell
return cell;
#elif 0
static NSString *cellID = @"id";
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
if (!cell) {
//NSBundle 統一管理程式資源的類
cell = [[[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil] lastObject];
}
cell.titleLabel.text = @"標題";
cell.nameField.text = @"名字";
return cell;
#else
//由於提前註冊了這個cell 需要使用下面這個方法
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"id" forIndexPath:indexPath];
return cell;
#endif
}
2.cell的建立
#pragma mark--建立cell的時候呼叫
//cell的初始化用initWithStyle而不是initwithframe
-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
[self setUpAllChildView];
}
return self;
}
3.獲取固定的cell
//獲取某個固定的cell
UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
4.設定cell的分割線
cell.separatorInset= UIEdgeInsetsMake(20, 50, 20, 50);
//設定cell的顏色
self.tabelView.separatorColor = [UIColor red];
4.自動使用導航條
//是否自動適應導航條與標籤條
self.automaticallyAdjustsScrollViewInsets = YES;
5.表頭、表尾、內邊距、偏移量 self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
self.tableView.contentOffset = CGPointMake(0, 0);
self.tableView.tableHeaderView = headerView;
self.tableView.tableFooterView = footerView;
6.重新整理
//重新整理某一行
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic];
//具體某些分割槽重新整理過載
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:(view.tag - 100)] withRowAnimation:UITableViewRowAnimationFade];
//重新整理所有
[self.tableView reloadData];
7.選中狀態
//去掉選中的狀態
[self deselectRowAtIndexPath:indexPath animated:YES];