使用 Swift 3 将数据从 Modal Viewcontroller 传递到 rootController(不要 Segue)

Posted

技术标签:

【中文标题】使用 Swift 3 将数据从 Modal Viewcontroller 传递到 rootController(不要 Segue)【英文标题】:Pass data from Modal Viewcontroller to rootController with Swift 3 (don`t Segue) 【发布时间】:2017-05-04 20:33:49 【问题描述】:

我有问题。

我需要帮助。我一直在寻找解决方案大约 5 个小时。可惜没有成功。

我的问题是我有几个故事板并且在没有 Segue 的情况下创建。

我希望将选定的 Tableviewcell 标题传递给 rootViewController。

这是我在 ModalViewTable 中的代码:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
    let indexNumber = "\(indexPath.row)"

    let indexPath = tableView.indexPathForSelectedRow
    let currentCell = tableView.cellForRow(at: indexPath!) as UITableViewCell!
    let storyboard = UIStoryboard(name: "addTime", bundle: nil)
    var viewController = storyboard.instantiateViewController(withIdentifier: "addTimeVC") as! addTimeViewController
    viewController.test = "TESTABCDEF"
    passedValue = ("\(indexNumber)")
    dismiss(animated: true, completion: nil)

我的 firstViewController 中有一个属性 test。这里有什么问题? 我也尝试过委托和闭包,但没有成功。请帮我。

【问题讨论】:

您可能需要出示您刚刚创建的viewController。顺便说一句,你想回到你以前的 VC 还是展示一个全新的? 如果我再介绍一次,那还是为了回忆不好。我对 ModalViewController 使用了 Present (vc, animated: true ...) ,我想用解雇回来。使用静态变量,我可以通过标题,但它不干净还是? 不,使用static var 会在以后给您带来麻烦。请在下面查看我的答案以获得更好的选择。 【参考方案1】:

试试这个:

let indexNumber = "\(indexPath.row)"
let indexPath   = tableView.indexPathForSelectedRow
let currentCell = tableView.cellForRow(at: indexPath!) as UITableViewCell!

let viewController = navigationController!.presentingViewController as! addTimeViewController
viewController.test = "TESTABCDEF"
passedValue = ("\(indexNumber)")
navigationController!.dismiss(animated: true, completion: nil)

当您使用present(_:animated) 方法以模态方式呈现视图控制器时,呈现的视图控制器presentingViewController 属性设置为呈现的视图控制器它。换句话说,这个属性包含对前一个视图控制器的引用。

【讨论】:

我试过这段代码。应用程序崩溃了。这是错误代码:无法将“UINavigationController”(0x1104e8008)类型的值转换为“timeSheet.addTimeViewController”(0x10e257d68)。这是控制器存在的代码: @UmitSevim 答案已更新!有机会请再试一次... :) 很遗憾没有成功。我再次遇到同样的错误:(。 @UmitSevim Weird...请尝试按原样复制和粘贴我的代码。你可能错过了什么…… 我也复制了你的代码并没有成功插入:)。我没有进一步发展的愿望。 :D

以上是关于使用 Swift 3 将数据从 Modal Viewcontroller 传递到 rootController(不要 Segue)的主要内容,如果未能解决你的问题,请参考以下文章

Swift Modal Self 变为 Nil

Swift 3 - 将数据传递回以前的视图控制器

将数据从 TableViewController 传递到 XIB 文件而不使用 Segues-Swift 3

Swift - 使用 selectedIndex 更改 var

Swift 3:将数据从 TabBarController 传递到子视图控制器

如何使用 SWrevaelviewController swift 3 将数据从 tableview 的特定行传递到另一个视图控制器