在UITableView中获取所选附件按钮的IndexPath

Mar*_*oni 5 indexing uitableview segue

我的UItableViewCell附件按钮有问题.我的配件按钮与另一个UIViewController的segue"连接".当我点击一个附件按钮时,我从模型中获取对象,并将此对象"传递"到segue destinationViewController.这是我对segue方法的准备:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"IdentityCard"])
    {
        NSLog(@"%i" ,self.tableView.indexPathForSelectedRow.row);
        [segue.destinationViewController showIdentityCardForTeacher:[self.teachers getTeacherInPosition:self.tableView.indexPathForSelectedRow.row]];
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是方法开头的NSLog(在"if"之后)始终显示数字0!我试着实现这个方法:

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)

但是在这个方法之前执行了segue方法的准备,所以我不能设置任何@property来"保存"indexPath.我怎么解决这个问题?

小智 20

在:

- (void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender

...你有'sender'参数,可以让你知道已被Tapped的附件的Cell,所以:

index = [self.tableView indexPathForCell:sender] .row;

您可以获取它的索引以便使用它.

然后您不需要使用tableView的accessoryButtonTappedForRowWithIndexPath方法.


Mar*_*oni 1

我用这种方式解决了这个问题:我将 UIViewController 连接到destinationViewController(不是从附件按钮,而是从 UIViewController)。

我在第一个视图控制器中创建了一个@property:

@property (nonatomic) NSInteger indexPathRow;
Run Code Online (Sandbox Code Playgroud)

然后我将代码修改如下:

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"Disclosure Tapped----> %i" ,indexPath.row);
    self.indexPathRow = indexPath.row;
    [self performSegueWithIdentifier:@"IdentityCard" sender:self];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"IdentityCard"])
    {
        NSLog(@"%i" ,self.tableView.indexPathForSelectedRow.row);
        [segue.destinationViewController showIdentityCardForTeacher:[self.teachers getTeacherInPosition:self.indexPathRow]];
    }
}
Run Code Online (Sandbox Code Playgroud)

现在可以了!