检测tableView中每个部分的最后一个单元格

时间:2017-03-06 14:53:21

标签: ios objective-c xcode uitableview tableviewcell

我需要你的帮助才能找到解决问题的最佳解决方案。 我有TableView的动态数据(JSON解析)。我的tableView包含一些部分(也是从JSON解析)。我必须检测每个部分中的最后一个单元格,并在自定义后添加圆角。 (如iOS 10上的新通知视图)

所以我已经尝试过这段代码:

NSInteger sectionsAmount = [tableView numberOfSections];
NSInteger rowsAmount = [tableView numberOfRowsInSection:[indexPath section]];
if ([indexPath section] == sectionsAmount - 1 && [indexPath row] == rowsAmount - 1) 

有了这部分代码检测和圆角,只有所有tableview中的最后一个单元格没有每个部分中的最后一个...请帮助任何人。

解决方案:(完美地为我工作)

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{

    NSInteger numberOfRows = [tableView numberOfRowsInSection:indexPath.section];

    if (indexPath.row == (numberOfRows-1)) {
        UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:cell.bounds byRoundingCorners:( UIRectCornerBottomLeft | UIRectCornerBottomRight) cornerRadii:CGSizeMake(10.0, 10.0)];

        CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
        maskLayer.frame = self.view.bounds;
        maskLayer.path  = maskPath.CGPath;
        cell.tag = 1;
        cell.layer.mask = maskLayer;

    } 
}

禁止重装电池

-(void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

    cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    cell = (ScheduleCell*)[cell viewWithTag:1];
    [cell removeFromSuperview];

}

1 个答案:

答案 0 :(得分:3)

您不应该查看现有的tableView部分等。

由于您不需要对屏幕上不可见的单元格和部分执行此操作。

最好的方法是检查保存每个部分信息的datasource

此检查应改为tableView:cellForRowAtIndexPath:方法。您可以检查单元格indexPath.row是否是包含信息的dataSource的最后一个单元格,并在那里或tableView:willDisplayCell:forRowAtIndexPath:中进行自定义。

修改

我误解了你的问题。

以下是您在上述方法中可以执行的检查:

NSInteger numberOfRows = [tableView numberOfRowsInSection:indexPath.section];

if (indexPath.row == (numberOfRows-1)) {

}

或者如上所述检查我认为更清洁的数据源:

NSInteger numberOfRows = myDataSourceNumberOfRowsForIndexPathSection;

if (indexPath.row == (numberOfRows-1)) {

}