Как получить индексный путь в prepareForSegue

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

Я хочу получить доступ к указанному index строки, но покажу null для каждой выбранной строки. пожалуйста помогите?

Ответы

Ответ 1

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

Ответ 2

Два случая:

1) Segue связанный с viewController

Вызовите segue из вашего метода didSelectRowAtIndexPath, передайте indexPath как sender

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

Затем вы можете получить indexPath в качестве отправителя в 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, подключенный из ячейки

Нет необходимости реализовывать метод didSelectRowAtIndexPath и performSegueWithIdentifier: Вы можете напрямую получить sender как UITableviewCell в prepareForSegue:sender:

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

Ответ 3

Как это

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UITableViewCell *)sender {
    FTGDetailVC *detailVC = (id)segue.destinationViewController;
    NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];

    FTGNote *note = self.notes[indexPath.row];
    [detailVC updateWithNote:note];
}

Ответ 4

извините, я не понимаю, что вы хотите сделать. возможно получить indexPath.row через этот метод UITAbleViewDelegate который он вызвал, когда вы нажимаете на ячейку вашего tableView:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

     self.myVariable = indexPath.row
}

и тогда вы можете получить доступ к этому значению в prepareForSegue следующим образом:

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
         //do something with self.myVariable
}

Надеюсь, я тебе помог.