tableView

tableView是我们做项目最常用的一个组件了,它的功能也非常的多。近期整理了自己曾经的笔记,现归纳总结分享给大家,有不足望指正修改。

1、通过tag在cellForRowAtIndexPath中获取当前cell内的控件
let label = cell.viewWithTag(1000) as! UILabel

2、ios7以后,防止tableView留白问题,在viewDidLoad里面设置
self.automaticallyAdjustsScrollViewInsets = NO

3、去除选中背景
self.tableView.allowsSelection = NO

4、去除分割线
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone
去掉多余的分割线,设置下面的就行了
UITableView的tableFooterView = UIView()

5、选中cell的状态抬起后消失
tableView.deselectRowAtIndexPath(indexPath, animated: true)
设置cell不可选中
cell.selectionStyle = UITableViewCellSelectionStyleNone
摆脱选中单元格时出现蓝色显示
self.tableView.allowsSelection = NO

6、禁止tableView滚动
tableview.userInteractionEnabled = false

tableView.scrollEnabled = false

7、让tableView上层的View隐藏
[firstViewsetHidden:YES];

8、设置cell的选择标记

if cell.accessoryType == .None {
   cell.accessoryType = .Checkmark
}else{
  cell.accessoryType = .None
}

9、去掉cell右边的箭头
cell.accessoryType = UITableViewCellAccessoryNone
设置右侧箭头
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator

10、返回当前显示的数组
tableView.visibleCells

11、根据cell获取对应的row
let indexPaths:NSIndexPath = tableView.indexPathForCell(cell)!
获取当前的cell
let btnPos:CGPoint = sender.convertPoint(CGPointZero, toView: self.tableView)
let indexPath:NSIndexPath = self.tableView.indexPathForRowAtPoint(btnPos)!

12、滚动条的偏移量
self.tableView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, 49, 0)

13、设置HeadView随着cell一起滚动
将table设置为UITableViewStyleGrouped类型。tableView中的headView就可以table滚动。

14、自适应高度
第一步
super.viewDidLoad()
tableView.estimatedRowHeight = 44.0
tableView.rowHeight = UITableViewAutomaticDimension
第二步
设置label的约束,记得不要设置高度,把lines设为0
第三步
在Content Hugging Priority里修改Vertical为250

15、动态会变化的cell
cell.updateConstraintsIfNeeded()

16、半透明的tableview
self.modalPresentationStyle = .Custom

17、默认选中cell
NSIndexPath *ip = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView selectRowAtIndexPath:ip animated: YES scrollPosition: UITableViewScrollPositionBottom]

标记、移动、删除、插入

1、标记

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath  
{  
    UITableViewCell *cellView = [tableView cellForRowAtIndexPath:indexPath];  
    if (cellView.accessoryType == UITableViewCellAccessoryNone) {  
        cellView.accessoryType=UITableViewCellAccessoryCheckmark;  
    } else {  
    cellView.accessoryType = UITableViewCellAccessoryNone;  
    [tableView deselectRowAtIndexPath:indexPath animated:YES];  
    }  
} 
UITableViewCellAccessoryCheckmark                         
UITableViewCellAccessoryDetailDisclosureButton
UITableViewCellAccessoryDisclosureIndicator  
UITableViewCellAccessoryNone

2、移动
实现移动单元格就需要把单元格的编辑属性设置为YES,[tableView setEditing:YES animated:YES];

//返回YES,表示支持单元格的移动  
-(BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath  
{  
    return YES;  
} 
 //单元格返回的编辑风格,包括删除 添加 和 默认  和不可编辑三种风格  
 -(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath  
{  
    return UITableViewCellEditingStyleInsert;  
}
UITableViewCellEditingStyleDelete               
UITableViewCellEditingStyleInsert
UITableViewCellEditingStyleNone

// 实现移动的方法
-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath  
{  
//    需要的移动行  
    NSInteger fromRow = [sourceIndexPath row];  
//    获取移动某处的位置  
    NSInteger toRow = [destinationIndexPath row];  
//    从数组中读取需要移动行的数据  
    id object = [self.listData objectAtIndex:fromRow];  
//    在数组中移动需要移动的行的数据  
    [self.listData removeObjectAtIndex:fromRow];  
//    把需要移动的单元格数据在数组中,移动到想要移动的数据前面  
    [self.listData insertObject:object atIndex:toRow];    
}

3、删除
首先是判断(UITableViewCellEditingStyle)editingStyle

  //单元格返回的编辑风格,包括删除 添加 和 默认  和不可编辑三种风格  
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath  {  
   return UITableViewCellEditingStyleDelete;  
 }  

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath  
{  
   if (editingStyle==UITableViewCellEditingStyleDelete) {  
  //        获取选中删除行索引值  
        NSInteger row = [indexPath row];  
 //        通过获取的索引值删除数组中的值  
        [self.listData removeObjectAtIndex:row];  
 //        删除单元格的某一行时,在用动画效果实现删除过程  
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];  
   }  
}

4、插入(添加)
实现方法和删除方法相同,首先还是返回单元格编辑风格

//单元格返回的编辑风格,包括删除 添加 和 默认  和不可编辑三种风格  
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath  
{  
     return UITableViewCellEditingStyleInsert;  
}
 // 为了显示效果明显,在.h文件中声明一个变量i
    NSInteger i;  
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath  
{  
    if (editingStyle==UITableViewCellEditingStyleDelete) {  
//        获取选中删除行索引值  
        NSInteger row = [indexPath row];  
//        通过获取的索引值删除数组中的值  
        [self.listData removeObjectAtIndex:row];  
//        删除单元格的某一行时,在用动画效果实现删除过程  
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];  
    }  
    if(editingStyle==UITableViewCellEditingStyleInsert)  
    {  
         
        i=i+1;  
        NSInteger row = [indexPath row];  
        NSArray *insertIndexPath = [NSArray arrayWithObjects:indexPath, nil];  
        NSString *mes = [NSString stringWithFormat:@"添加的第%d行",i];  
//        添加单元行的设置的标题  
        [self.listData insertObject:mes atIndex:row];  
        [tableView insertRowsAtIndexPaths:insertIndexPath withRowAnimation:UITableViewRowAnimationRight];  
    }  
}  

你可能感兴趣的:(tableView)