如何检测UITableView

时间:2017-06-26 10:30:32

标签: ios objective-c swift

我是iOS开发的新手,目前正在使用UITableView。我想在设备屏幕上找到最后一个可见的单元格,屏幕底部的单元格必须是蓝色,当单元格滚动到屏幕顶部时,它应该渐变为绿色。

我已经浏览了这些链接

Link1 Link2

但无法获得成功。任何人都可以提供如何检测最后一个细胞的想法。细胞淡化动画?

4 个答案:

答案 0 :(得分:4)

获取最后一个可见的单元格:

if let lastCell = tableView.visibleCells.last {
    // do something with lastCell
}

答案 1 :(得分:1)

在Swift 3.0中,您可以使用此tableview方法。

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)
{
    let intTotalrow = tableView.numberOfRows(inSection:indexPath.section)//first get total rows in that section by current indexPath.           
    //get last last row of tablview
    if indexPath.row == intTotalrow - 1{

        // call for last display 
    }
}

答案 2 :(得分:0)

试试这段代码,它会起作用

最初声明

int firstIndexRow;
int lastIndexRow;

在ViewDidLoad()

中写下面的代码
 [myTable reloadData]; //Reload because get visible last cell index row
firstIndexRow = 0;

lastIndexRow = (int)[self.myTable.indexPathsForVisibleRows lastObject].row;

NSLog(@"first : %d",firstIndexRow);
NSLog(@"Bottom : %d",lastIndexRow);


- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{


    NSIndexPath *firstVisibleIndexPath = [[self.myTable indexPathsForVisibleRows] objectAtIndex:0];

    NSIndexPath *lastObject = [self.myTable.indexPathsForVisibleRows lastObject];

    firstIndexRow = (int)firstVisibleIndexPath.row;

    lastIndexRow = (int)lastObject.row;

    NSLog(@"first : %d",firstIndexRow);
    NSLog(@"Bottom : %d",lastIndexRow);

    [myTable reloadData];

}


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [myTable dequeueReusableCellWithIdentifier:@"cell"];

    if (indexPath.row == firstIndexRow) {
        cell.textLabel.textColor = [UIColor blueColor];
    }else if (indexPath.row == lastIndexRow) {
        cell.textLabel.textColor = [UIColor greenColor];
    }else{
        cell.textLabel.textColor = [UIColor grayColor];
    }

    cell.textLabel.text =[namesArray objectAtIndex:indexPath.row];


    return cell;
}

答案 3 :(得分:0)

@shallowThought解决方案仅在已经显示单元格的情况下有效。

但是,如果您想知道尚未显示并将要显示的单元格的最后一个单元格,我们可以为UITableView创建扩展,如下所示:

func isLastVisibleCell(at indexPath: IndexPath) -> Bool {
    guard let lastIndexPath = indexPathsForVisibleRows?.last else {
        return false
    }
    return lastIndexPath == indexPath
}

这样,您可以多次检查tableView.isLastVisibleCell(...),直到到达实际可见的单元格为止。