Reputation: 7102
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
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
Reputation: 617
Swift 4 version:-
let totalRow =
tableView.numberOfRows(inSection: indexPath.section)
if(indexPath.row == totalRow - 1)
{
return
}
Upvotes: 1
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
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
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
Reputation: 25692
- (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
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
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