在didSelectRowAtIndexPath中使用展开segue?

时间:2014-05-28 19:06:25

标签: ios objective-c didselectrowatindexpath stack-unwinding

我有一个根视图控制器A,它将segue推送到表视图控制器B.当在B中选择一行时,我想使用展开segue返回A并将行中的文本传回根视图A.然后我使用prepare for segue方法发送stint,如下所示:

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

但我不知道该怎么做,就是在didSelectRowAtIndexPath方法中调用unwind segue。

感谢您的帮助。

3 个答案:

答案 0 :(得分:13)

不要打电话给任何人。在控制器B的表视图中连接来自单元格的展开segue,并通过触摸单元格来调用展开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"];
}

答案 1 :(得分:0)

如果要返回视图控制器,则不需要准备segue。您可以直接调用该视图控制器。 Check here.

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

[self.navigationController popViewControllerAnimated:yes]

您可以在didSelectRowAtIndexPath中执行所有这些操作。

答案 2 :(得分:0)

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
        }
    }
}

模态ViewController:

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!
}