How to get indexpath in prepareForSegue

Pin*_*put 39 uitableview ios

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    {
    if ([segue.identifier isEqualToString:@"Action"])
    {
        NSIndexPath *indexPath = [self.tbl indexPathForSelectedRow];
        SecondViewController *destViewController = segue.destinationViewController;
        destViewController.getString = [getArray objectAtIndex:indexPath.row];
    }
}
Run Code Online (Sandbox Code Playgroud)

i wanna to access the selected row index,but show null for every selected row. please help me?

Suh*_*hil 66

Two cases:

1)Segue connected from the viewController

Call segue from your didSelectRowAtIndexPath method, pass indexPath as sender

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self performSegueWithIdentifier:@"Action" sender:indexPath];
}
Run Code Online (Sandbox Code Playgroud)

Then you can get indexPath as sender in prepareForSegue:sender: method

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
 {
     if ([segue.identifier isEqualToString:@"Action"])
      {
           NSIndexPath *indexPath = (NSIndexPath *)sender;
           SecondViewController *destViewController = segue.destinationViewController;
           destViewController.getString = [getArray objectAtIndex:indexPath.row];
      }
  }
Run Code Online (Sandbox Code Playgroud)

2)segue connected from the cell

No need to implement didSelectRowAtIndexPath method and performSegueWithIdentifier:.You can directly get sender as UITableviewCell in prepareForSegue:sender: method.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{
    if ([segue.identifier isEqualToString:@"Action"])
    {
        NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
        SecondViewController *destViewController = segue.destinationViewController;
        destViewController.getString = [getArray objectAtIndex:indexPath.row];
    }
}
Run Code Online (Sandbox Code Playgroud)


ton*_*har 54

Swift 3.0/iOS 10

tableView.indexPathForSelectedRow 在iOS 9中引入

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let indexPath = tableView.indexPathForSelectedRow{
        let selectedRow = indexPath.row
        let detailVC = segue.destination as! ParkDetailTableVC
        detailVC.park = self.parksArray[selectedRow]
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 另请注意集合视图上的并行属性 `indexPathsForSelectedItems`,它的使用方式可能如下: ```if let selectedIndexPathRow = collectionView?.indexPathsForSelectedItems?.first?.row { doStuff(with: myDataSourceArr[selectedIndexPathRow] } ``` (2认同)