5

UItableViewCell 附件按钮有问题。我的附件按钮与另一个 UIViewController 的 segue “连接”。当我点击附件按钮时,我从模型中获取对象并将该对象“传递”到 seguedestinationViewController。这是我为 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]];
    }
}

问题是方法开头的 NSLog(在“if”之后)总是显示数字 0!我试图实现该方法:

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath

但是在此方法之前执行了 segue 方法的准备,因此我无法为“保存”indexPath 设置任何@property。我怎么解决这个问题?

4

3 回答 3

20

在:

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

...你有'sender'参数,让你知道已经被窃听的附件的单元格,所以:

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

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

那么就不需要使用tableView的accessoryButtonTappedForRowWithIndexPath方法了。

于 2013-07-16T00:28:07.957 回答
1

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

我在第一个 View Controller 中创建了一个 @property:

@property (nonatomic) NSInteger indexPathRow;

然后我修改了这样的代码:

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

现在它起作用了!

于 2012-11-22T17:23:37.363 回答
0

@Andres 的解决方案对我有用,但如果我想将添加按钮添加到导航栏并且我想显示具有相同 segue 标识符的相同视图控制器,那么index = [self.tableView indexPathForCell:sender].row;代码不起作用,因为发送者不是 UITableViewCell 的子类。所以这是我使用@Andres 代码的解决方案:

- (void) addItem: (id) sender {
    [self performSegueWithIdentifier: @"Identifier" sender: self];
}

- (void) prepareForSegue: (UIStoryboardSegue *) segue sender: (id) sender {
    id selectedObject;
    if (![[sender class] isSubclassOfClass: [UITableViewCell class]]) {
        // create a new object
        selectedObject = [...];
    }
    else {
        selectedObject = [objectArray objectAtIndex: [self.tableView indexPathForCell: sender].row];
    }

    if ([[segue identifier] isEqualToString: @"Identifier"]) {
        // use the new or existing object
        [selectedObject doSonething];
    }
}
于 2015-05-29T10:55:18.653 回答