一些零散的屬性和方法 // 取得選中的那行 NSIndexPath *path = [self.tableView indexPathForSelectedRow]; // 每一行cell的高度 self.tableView.rowHeight = 50; // 每一組頭部控件的高度 self.tableView.sectionHeaderHeight = 44; // 設置footerView MJTgFooterView *footer = [MJTgFooterView footerView]; footer.delegate = self; self.tableView.tableFooterView = footer; self.tableView.tableHeaderView //表格的設置 // 去除分割線 self.tableView.backgroundColor = [UIColor colorWithRed:235/255.0 green:235/255.0 blue:235/255.0 alpha:1.0]; self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; self.tableView.allowsSelection = NO; // 不容許選中 自動滾動表格到最後一行 NSIndexPath *lastPath = [NSIndexPath indexPathForRow:self.messageFrames.count - 1 inSection:0]; [self.tableView scrollToRowAtIndexPath:lastPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]; 封裝好的從xib加載cell的方法(本身寫的) + (instancetype)cellWithTableView:(UITableView *)tableView { static NSString *ID = @"tg"; MJTgCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; if (cell == nil) { // 從xib中加載cell cell = [[[NSBundle mainBundle] loadNibNamed:@"MJTgCell" owner:nil options:nil] lastObject]; } return cell; } 關於數據源刷新 告訴tableView從新加載模型數據 // reloadData : tableView會向數據源從新請求數據 // 從新調用數據源的相應方法取得數據 // 從新調用數據源的tableView:numberOfRowsInSection:得到行數 // 從新調用數據源的tableView:cellForRowAtIndexPath:得知每一行顯示怎樣的cell // 所有刷新[self.tableView reloadData]; // 局部刷新 NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:0]; [self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationBottom]; 帶動畫效果的組刷新 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { MyHeaderFooterView *headerView = [MyHeaderFooterView headerViewWithTableView:tableView]; headerView.groupsModel = _dataArray[section]; headerView.tag = section; NSLog(@"%ld",headerView.tag); headerView.delegate = self; return headerView; } - (void)MyHeaderFooterViewDidClickedWithHeaderView:(MyHeaderFooterView *)headerView { //[self.tableView reloadData]; [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:headerView.tag] withRowAnimation:UITableViewRowAnimationAutomatic]; } //局部section刷新 NSIndexSet * nd=[[NSIndexSet alloc]initWithIndex:1];//刷新第二個section [tview reloadSections:nd withRowAnimation:UITableViewRowAnimationAutomatic]; //局部cell刷新 NSIndexPath *te=[NSIndexPath indexPathForRow:2 inSection:0];//刷新第一個section的第二行 [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:te,nil] withRowAnimation:UITableViewRowAnimationMiddle]; //註冊cell類 //[MyTableViewCell class] cell的集合類 [_tableView registerClass:[MyTableViewCell class] forCellReuseIdentifier:@"iden"]; - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // static NSString *iden = @"iden"; // MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:iden]; // if (cell == nil) { // cell = [[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:iden]; // } // BookModel *model = _dataArray[indexPath.row]; // cell.titleLabel.text = model.title; // cell.detailLabel.text = model.detail; // cell.priceLabel.text = model.price; // cell.iconImageView.image = [UIImage imageNamed:model.icon]; // return cell; //使用集合類 //從複用池裏面找帶有iden標識的cell,若是複用池裏面沒有,系統會自動建立,不用咱們管理 MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"iden" forIndexPath:indexPath]; BookModel *model = _dataArray[indexPath.row]; cell.titleLabel.text = model.title; cell.detailLabel.text = model.detail; cell.priceLabel.text = model.price; cell.iconImageView.image = [UIImage imageNamed:model.icon]; return cell; } 讓當前的cell帶有動畫效果的取消選中時的深背景色 [tableView deselectRowAtIndexPath:indexPath animated:YES];