16
 if([segue.identifier isEqualToString:@"Edit"]){

    AddCoffeeViewController *avc = [segue destinationViewController];

    Coffee *coffeeObj = [appDelegate.coffeeArray objectAtIndex:arow];
    NSLog(@"ViewController.m prepareForSegue: arow: %d coffeeName:%@ price:%@      coffeeID:%d",arow,coffeeObj.coffeeName,coffeeObj.price,coffeeObj.coffeeID);
    [coffeeObj setIsInEditMode:YES];
    avc.EditCoffeeObj = coffeeObj;


}

当我按下附件按钮时,我没有得到正确的行。

虽然在下面的方法中我得到了正确的行。如果我不想使用任何 ivar,有什么方法可以让我为 segue 做好正确的准备。

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

arow = indexPath.row;

}

在此处输入图像描述


tableViewCell 辅助按钮:执行模态转场(编辑)
+ 按钮(导航栏按钮项):执行模态转场(添加)

4

3 回答 3

33

如果您在情节提要中连接了辅助动作,那么senderinprepareForSegue:sender:将是被点击的单元格。这意味着你可以做类似的事情

NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
于 2013-02-11T14:33:23.283 回答
3

点击的附件按钮和选择的行是两个不同的东西。在accessoryButtonTappedForRowWithIndexPath 中,只需将indexPath 设置为一个全局变量,然后在segue 中使用它。

于 2013-02-11T14:18:29.463 回答
0

SWIFT 3.0解决方案;与 Objective-C 版本非常相似。所以 Cell 是发送者,我们通过Cell接收indexPath,其中的附件被按下

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let destination = segue.destination as? YourViewController {
        let indexPath = tableView.indexPath(for: sender as! UITableViewCell)!
    }
}
于 2016-10-27T20:43:47.597 回答