如何从 ViewController 中分离(推送)到 NavigationController 中嵌入的另一个 ViewController?
Posted
技术标签:
【中文标题】如何从 ViewController 中分离(推送)到 NavigationController 中嵌入的另一个 ViewController?【英文标题】:How to segue (push) from ViewController to another ViewController embedded in NavigationController? 【发布时间】: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。 【参考方案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 没有更新。
更新了我的答案。我回答了你的问题,所以请接受我的回答。以上是关于如何从 ViewController 中分离(推送)到 NavigationController 中嵌入的另一个 ViewController?的主要内容,如果未能解决你的问题,请参考以下文章
iPhone Model View Controller 在 ViewController 中分离
SwiftUI 如何从响应 JSON API 中分离单个数据