在didSelectRowAtIndexPath中使用取消转场segue?

5

我有一个根视图控制器A,它通过推送segue到表视图控制器B。当在B中选择一行时,我想使用反向Segue返回到A并将行中的文本传递回根视图A。然后,我使用“prepare for segue”方法像这样发送字符串:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
     ViewControllerA *vca = (ViewControllerA *)segue.destinationViewController;
    vca.textString = [[_objects objectAtIndex:indexPath.row] objectForKey:@"title"];
}

但是我不知道如何在didSelectRowAtIndexPath方法中调用unwind segue。
预先感谢您的帮助。
3个回答

15
不要调用任何东西。在B控制器中从表视图中的单元格连接反 unwind segue,触摸单元格将调用 unwind segue。您不需要完全实现didSelectRowAtIndexPath。您可以从sender(也就是您所触摸的单元格)在 prepareForSegue 中获取 indexPath。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UITableViewCell *)sender{
     ViewControllerA *vca = (ViewControllerA *)segue.destinationViewController;
     NSIndexPath *selectedPath = [self.tableView indexPathForCell:sender];
     vca.textString = _objects[selectedPath.row][@"title"];
}

2
这种技术的优点在于执行的代码可以在segue之前运行,而didselectRowIndexAtPath则在segue完成后运行。谢谢! - koehn

1

SWIFT 4.2 以下是我在一个应用程序中的操作方式,它打开一个弹出式菜单作为模态视图控制器,并嵌入了一个表格视图,用户从表格中选择数据,模态视图控制器关闭并在调用视图控制器中显示选定单元格的数据。

调用ViewController:

@IBAction func unwindFromPopup(segue: UIStoryboardSegue) {
    if segue.source is MyModalViewController {
        if let senderVC = segue.source as? MyModalViewController {
            MyTextField1.text = senderVC.MyID1InModalVC
            MyTextField2.text = senderVC.MyID2InModalVC
            MyTextField3.text = senderVC.MyID3InModalVC
        }
    }
}

模态视图控制器:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let cell = sender as! UITableViewCell
    let index = cell.convert(CGPoint.zero, to:self.tableView)
    let indexPath = self.tableView.indexPathForRow(at: index)

    // Now that I have the indexPath, I can do my stuff
    let myData = fetchedResultsController.object(at: indexPath!)
    MyID1InModalVC = myData.ID1!
    MyID2InModalVC = myData.ID2!
    MyID3InModalVC = myData.ID3!
}

0

如果你想返回到一个视图控制器,就不需要使用prepare for segue。你可以直接调用那个视图控制器。点击这里查看。

然后一旦你发送了父视图控制器的属性,你可以简单地弹出当前的视图控制器。

[self.navigationController popViewControllerAnimated:yes]

你可以在didSelectRowAtIndexPath中完成所有这些操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接