【问题标题】:How to segue (push) from ViewController to another ViewController embedded in NavigationController?如何从 ViewController 中分离(推送)到 NavigationController 中嵌入的另一个 ViewController?
【发布时间】:2015-08-29 20:31:29
【问题描述】:

我在 viewController 中有一个 tableView,当我点击一个单元格时,会对一个 嵌入 在另一个 viewController 中的导航控制器执行 push segue。在第一个 VC 的 swift 文件中,我在点击单元格时触发了 prepareForSegue 函数,在该函数中,我将一些信息传递给第二个 viewController 中的 textView。

但是当我运行我的应用程序时,当我点击一个单元格时出现错误,因为我将目标 VC 转换为第二个 VC 而不是 navigationController。但是,如果我将其转换为 navigationController,则 segue 可以工作,但我无法将第一个 VC 中的信息传递给第二个 VC 中的 textView。我在这里遗漏了什么吗?

【问题讨论】:

  • 您是否使用故事板 ID 作为目标视图控制器?尝试为导航控制器提供故事板 ID,然后执行您的 segue。

标签: ios xcode swift


【解决方案1】:

您应该到达导航控制器并从堆栈中获取 topViewController。此代码 sn-p 应该可以工作。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

            if segue.identifier == "yourSegueIdentifierIsHere" {

                    let destinationVC = segue.destinationViewController.navigationController?.topViewController as? YourClass
                    destinationVC. // do something.


            }
        }

第二个问题的答案是:

可以这样获取indexPath;

let indexPath = tableView.indexPathForSelectedRow

你可以使用yourArray[indexPath.row]

第三个问题的答案是;

不能在您的 prepareForSegue 方法中直接设置您的 textView.text。您应该在您的destionationViewController 中创建一个变量,然后您可以将数据发送到该变量。像这样在你的destinationViewController中创建一个变量;

var journalText: String = ""

现在在您的 prepareForSegue 方法中发送数据。

destinationVC.journalText = "Some string"

【讨论】:

  • 这行得通,但现在当我尝试访问单元格行号时收到一条错误消息。我把let selectedCell = sender as! UITableViewCell“无法将'UITableViewCell'(0x106ea03e8)类型的值转换为'UITableViewCell'(0x106ea03c0)。”
  • 我更新了我的答案。看第二个问题的答案是部分,不要忘记接受我的答案。
  • 这也有效,但现在又出现了另一个错误。 destinationViewController!.journalTextView.text = selectedEntry“致命错误:在展开可选值时意外发现 nil”。如果我更换!和 ?然后没有崩溃,但 textView 没有更新。
  • 更新了我的答案。我回答了你的问题,所以请接受我的回答。
猜你喜欢
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
  • 2012-07-07
  • 2012-12-02
  • 2013-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多