How to get indexpath in prepareForSegue

前端 未结 4 1038
予麋鹿
予麋鹿 2020-12-04 22:02
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    {
    if ([segue.identifier isEqualToString:@\"Action\"])
    {
        NSIndexPath *indexP         


        
4条回答
  •  南笙
    南笙 (楼主)
    2020-12-04 22:38

    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];
      }
      

      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];
          }
      }
      
    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];
          }
      }
      

提交回复
热议问题