获取在prepareForSegue中编辑行的索引路径?

时间:2015-06-03 12:01:07

标签: ios xcode uipopovercontroller

我正在使用UITableView并使用{WWI 2014中的讨论" prepareForSegue iOS8中的进展"

中使用View Controller方法呈现弹出框
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

UINavigationController * nvc = segue.destinationViewController;
UIPopoverPresentationController * pvc = nvc.popoverPresentationController;
pvc.delegate = self;
}

- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller
{
return UIModalPresentationNone;
}

问题是,我需要将编辑行中的值传递给popover。有没有办法干净利落地做到这一点(我知道它不存在,但是)

[self.myTableView indexPathForEditingRow];

我试过

[self.myTableView indexPathForSelectedRow];

但这会返回表格中的第一行。

4 个答案:

答案 0 :(得分:1)

如果从表视图中调用performSegueWithIdentifier,则可以发送indexPath。

[self performSegueWithIdentifier:@"identifier" sender:(NSIndexPath *)indexPath];

然后你可以调用prepareForSegue,你需要一个公开的方法或属性来设置popover上的indexPath

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(NSIndexPath *)indexPath
{
     if ([segue.identifier isEqualToString:@"identifier"])
     {
         UINavigationController * nvc = segue.destinationViewController;
         UIPopoverPresentationController * pvc = nvc.popoverPresentationController;
         //added property
         pvc.indexPath = indexPath;
         pvc.delegate = self;
     }
}

答案 1 :(得分:0)

检查您的sender是谁。如果它是一个细胞,你就拥有了你所需要的一切。 如果没有,您需要创建一个属性并记住didSelectCell委托的tableView方法中的索引路径。

答案 2 :(得分:0)

尝试:

CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];
NSLog(@"Riga selezionata: %ld",(long)[indexPath row]);

答案 3 :(得分:0)

您可以使用此UITableView扩展程序:

extension UITableView {

    var indexPathForEditingRow: NSIndexPath? {
        return indexPathsForEditingRows.first
    }

    var indexPathsForEditingRows: [NSIndexPath] {
        return visibleCells.flatMap { cell -> NSIndexPath? in
            guard let indexPath = indexPathForCell(cell) where cell.editingStyle != .None else {
                return nil
            }
            return indexPath
        }
    }

}