【问题标题】:Use an unwind segue in didSelectRowAtIndexPath?在 didSelectRowAtIndexPath 中使用展开转场?
【发布时间】:2014-07-18 03:57:32
【问题描述】:

我有一个根视图控制器A,它将segues推送到表视图控制器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。

提前感谢您的帮助。

【问题讨论】:

    标签: ios objective-c didselectrowatindexpath stack-unwinding


    【解决方案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!
    }
    

    【讨论】:

      【解决方案2】:

      什么都不叫。连接控制器 B 中表格视图中单元格的展开转场,然后通过单元格上的触摸调用展开转场。您根本不需要实现 didSelectRowAtIndexPath。您可以从发件人那里获取 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"];
      }
      

      【讨论】:

      • 这种技术的优点是执行的代码可以在segue之前运行,而didselectRowIndexAtPath在segue完成之后运行。谢谢!
      【解决方案3】:

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

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

      [self.navigationController popViewControllerAnimated:yes]
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-05
        • 2016-05-03
        • 2014-08-23
        • 1970-01-01
        • 2014-02-25
        相关资源
        最近更新 更多