首页 > 代码库 > TableView(2)

TableView(2)

1.启用tableView的滑动删除 (想让你的用户能从TableView中轻松删除行)

方案:在delegate中实现tableView:editingStyleForRowAtIndexPath:方法,在data source中实现tableView:commitEditingStyle:forRowAtIndexPath: 方法

代码:

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{    UITableViewCellEditingStyle result = UITableViewCellEditingStyleNone;    if ([tableView isEqual:_myTableView]) {        result = UITableViewCellEditingStyleDelete;    }    return result;}-(void)setEditing:(BOOL)editing animated:(BOOL)animated{    [super setEditing:editing animated:animated];    [_myTableView setEditing:editing animated:animated];}-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{    if (editingStyle == UITableViewCellEditingStyleDelete) {        if (indexPath.row < [self.arrayOfRows count]) {//小于行数            //先删除数据            [self.arrayOfRows removeObjectAtIndex:indexPath.row];            //然后删除表视图的cell            [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];        }    }}

tableView:editingStyleForRowAtIndexPath:方法能够启动插入删除功能,它被tableView调用,同时它的返回值决定了tableView允许用户做什么操作(插入,删除等)

tableView:commitEditingStyle:forRowAtIndexPath: 必须使用该方法删除数据,也必须要从表中删除行.

deleteRowsAtIndexPaths:withRowAnimation:  实现表视图删除行,第二个参数是删除行时的动画方案

 

2.在Tableview中构建页眉和页脚

方案:创建一个视图,然后把这个视图分配到tableView 的1个Section的页眉和页脚中.你也可以指定某个页眉或者页脚的高度.

代码:

    我们先创建一个带有tableView 的简单APP.随后我们提供2个标签,它们属于UILable类;一个做页眉,一个做页脚.

- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.    _myTableView = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStyleGrouped];    _myTableView.dataSource = self;    _myTableView.delegate = self;    _myTableView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;    [self.view addSubview:_myTableView];}- (BOOL)shouldAutorotate{    return YES;}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    UITableViewCell *result = nil;    static NSString *CellIdentifier = @"CellIdentifier";    result = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];    if (result == nil) {        result = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];            }    result.textLabel.text = [NSString stringWithFormat:@"Cell %ld",indexPath.row];    return result;}- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{    return 1;}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{    return 3;}

然后用UITableViewDelegate定义的2个重要方法来提供一个页眉标签和另一个页脚标签:

tableView:viewForHeaderInSection:

tableView:viewForFooterInSection:

另外我们还能规定页眉页脚的高度,让表视图跟美观,方法:

tableView:heightForHeaderInSection: 

tableView:heightForFooterInSection: 

下面我们实现这些方法:

#pragma mark - 添加页眉和页脚- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{    UILabel *result = nil;    if ([tableView isEqual:_myTableView] && section == 0) {        result = [self createLabelWithString:@"Section 1 Header"];    }    return result;}- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{    UILabel *result = nil;    if ([tableView isEqual:_myTableView] && section == 0) {        result = [self createLabelWithString:@"Section 1 Footer"];    }    return result;}- (UILabel *)createLabelWithString:(NSString *)string{    UILabel *result = [[UILabel alloc]initWithFrame:CGRectZero];    result.text = string;    result.backgroundColor = [UIColor clearColor];    [result sizeToFit];        return result;}//修改页眉页脚的高度- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{    CGFloat result = 0.0f;    if ([tableView isEqual:_myTableView] && section == 0) {        result = 30.0f;    }    return result;}- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{    CGFloat result = 0.0f;    if ([tableView isEqual:_myTableView] && section == 0) {        result = 30.0f;    }    return result;}

此时运行程序,会发现页眉页脚视图label 放在了最左面.你可能想通过更改页眉标签的frame解决这个问题,但这个方法行不通.

解决方法是 创建一个通用的UIView,把页眉页脚标签放上面.此时再更改页眉页脚的位置.

修改tableView:viewForHeaderInSection: 和 tableView:viewForFooterInSection:方法的实现过程:

#pragma mark - 添加页眉和页脚- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{    UIView *result = nil;    CGFloat offsetX = 50.0f;    if ([tableView isEqual:_myTableView] && section == 0) {        UILabel *label = [self createLabelWithString:@"Section 1 Header"];        label.frame = CGRectMake(label.frame.origin.x + offsetX, 5.0f, label.frame.size.width, label.frame.size.height);        CGRect resultFrame = CGRectMake(0.0f, 0.0f, label.frame.size.width + offsetX, label.frame.size.height);        result = [[UIView alloc]initWithFrame:resultFrame];        [result addSubview:label];    }    return result;}- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{    UIView *result = nil;    CGFloat offsetX = 50.0f;    if ([tableView isEqual:_myTableView] && section == 0) {        UILabel *label = [self createLabelWithString:@"Section 1 Footer"];        label.frame = CGRectMake(label.frame.origin.x + offsetX, 5.0f, label.frame.size.width, label.frame.size.height);        CGRect resultFrame = CGRectMake(0.0f, 0.0f, label.frame.size.width + offsetX, label.frame.size.height);        result = [[UIView alloc]initWithFrame:resultFrame];        [result addSubview:label];    }    return result;}

根据以上了解到的方法,我们可以放置图片做页眉页脚.

另外,如果想放入文字作为页眉页脚,可以使用2个更简单的方法:

tableView:titleForHeaderInSection: 

tableView:titleForFooterInSection: 

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{    return @"Section 1 Header";}- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section{    NSString *result = nil;    if ([tableView isEqual:_myTableView] && section == 0) {        result = @"Section 1 Footer";    }    return result;}

 

TableView(2)