tech_human
tech_human

Reputation: 7102

Get last cell in a UITableview section

I have a section in UITableView which has multiple rows. I wish to get the last row or the last cell of the section to add a disclosure indicator on it.

One way I am thinking to use is:

NSIndexPath *lastCellIndexPath = [NSIndexPath indexPathForItem:[self.tableView numberOfRowsInSection:2]-1 inSection:2];

Is there any other best way to get the cell or indexpath of the last cell on a section?

Upvotes: 19

Views: 37052

Answers (8)

Shakeel Ahmed
Shakeel Ahmed

Reputation: 6013

Swift 5+

//Show Last Cell (for Table View)
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) 
{
    if indexPath.row == (yourdataArray.count - 1) 
    {
        print("came to last row")
    }
}

//Show last cell (for Collection View)
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) 
{
    if indexPath.row == (yourdataArray.count - 1)
    {
        // Last cell is visible
    }
}

Upvotes: 0

dinesh sharma
dinesh sharma

Reputation: 617

Swift 4 version:-

  let totalRow =
            tableView.numberOfRows(inSection: indexPath.section)
        if(indexPath.row == totalRow - 1)
        {
            return
        }

Upvotes: 1

Unit Testing
Unit Testing

Reputation: 261

Swift version:

let totalRows = tableView.numberOfRows(inSection: indexPath.section)
//first get total rows in that section by current indexPath.
if indexPath.row == totalRows - 1 {
    //this is the last row in section.
}

Upvotes: 13

Narasimha Nallamsetty
Narasimha Nallamsetty

Reputation: 1263

I wonder how i did miss it. The easiest solution is here.. I wrote in didSelectRowAtIndexPath method according to my requirement.

if (indexPath.row ==userAccountsList.count-1)
{
    NSLog(@"last row it is ");
       }

In the above code userAccountsList is array which we are passing to tableview.

Upvotes: 1

johnMa
johnMa

Reputation: 3311

    NSInteger totalRow = [tableView numberOfRowsInSection:indexPath.section];//first get total rows in that section by current indexPath.
    if(indexPath.row == totalRow -1){
         //this is the last row in section.
    }

hope it helps.

I did this in tableView:willDisplayCell:forRowAtIndexPath: method

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

Upvotes: 49

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

        //Section 0
        if (indexPath.section == 0) {

            // Is Last row?
            if ([dataSouceArray count] == (indexPath.row+1)) {
                //Yes

                cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;


            }
            else{
                // other rows

                cell.accessoryType = UITableViewCellAccessoryNone;

            }


        }


    }

Upvotes: 3

sha
sha

Reputation: 17850

You should do this inside your cellForRowAtIndexPath method. You can easily detect that which section this cell belongs to and whether it's the last one.

Upvotes: 1

Toseef Khilji
Toseef Khilji

Reputation: 17409

You can get it from your datasource from which you set in delegate methods, the datasource you assign in numberOfRowsInSection method.

[arrayStores lastObject];

so in cellForRowAtIndexPath method you can easily check it,

Upvotes: 0

Related Questions