如何从 popoverpresentation 视图控制器导航到另一个视图控制器
Posted
技术标签:
【中文标题】如何从 popoverpresentation 视图控制器导航到另一个视图控制器【英文标题】:How to navigate from popoverpresentation view controller to another view controller 【发布时间】:2016-06-26 09:04:43 【问题描述】:我有一个带有导航控制器的屏幕,它在导航栏上有一个按钮,它显示一个表格(来自另一个视图控制器)以使用弹出式演示选择内容,现在点击我想要打开的任何项目另一个视图控制器不同的屏幕。
但是如果我使用navigationController?.pushViewController(tab, animated: true)
新的视图控制器显示在那个小弹出视图本身中
如果我使用
navigationController?.presentViewController(tab, animated: true)
,导航栏不在该屏幕上,我无法返回上一个屏幕。如何做到这一点,我可以返回到第一个显示弹出列表的屏幕。
【问题讨论】:
您使用情节提要还是只使用代码? 代码主要是@Sweeper 那么你在弹出框控制器和显示它的 VC 之间有 segues 吗? ` func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) let storyboard = UIStoryboard(name: "Main", bundle: nil) let tab = storyboard.instantiateViewControllerWithIdentifier("vm") as! vmViewController navigationController?.pushViewController(tab, animated: true) `这就是我展示它的方式,从一个视图导航到另一个视图它在其余部分工作正常,但仅在弹出框上它没有发生,可能是因为弹出框有它自己的视图控制器,它只是直接显示 来吧,现在是 2016 年。使用 unwind segues! 【参考方案1】:如果您使用的是故事板,那真的很容易做到。如果你不是,那么你应该。使用 Storyboard 非常好。
让我们将这些名称称为您的视图控制器:
可以显示弹出框的视图控制器称为SourceVC
弹出框控制器被称为PopoverVC
当用户从表视图中选择某些内容时显示的视图控制器称为NewVC
添加将您的SourceVC
连接到您的NewVC
的显示转接。给 segue 一个标识符。
添加一个从PopoverVC
展开到SourceVC
的展开转场。首先,将这些方法添加到您的SourceVC
:
func unwind(segue: UIStoryboardSegue)
if let vc = segue.sourceViewController as? PopoverVC
// get the thing that the user selected and store it somewhere
// perform a segue that shows NewVC
override func prepareForSegue(segue: UIStoryboardSegue)
if let vc = segue.destinationViewController as? NewVC
// pass the thing that the user selected to the NewVC
然后,选择PopoverVC
并控制将其拖动到SourceVC
中的“退出”东西。并选择“放松:”。也给这个 unwind segue 一个标识符。
当用户在表格视图中选择一行时,只需执行展开转场并将用户选择的内容存储在类级变量中,以便您可以将其传递给SourceVC
。
【讨论】:
popovervs 的内容将在 popovervc 中,所以如果我将上述代码添加到 source vc,我如何执行 segue 以显示 sourcevc 中的 newvc,因为 popovervc 是弹出数据的 vc以列表(表格)形式 看到评论// get the thing that the user selected and store it somewhere
?当用户选择一行时,您将用户选择的内容存储在PopoverVC
的变量中。我们称之为userSelectedThing
。您只需要将vc.userSelectedThing
存储在SourceVC
的变量中。我们也称它为userSelectedThing
。在prepareForSegue
中,将self.userSelectedThing
传递给NewVC
。是的,我知道这很复杂。毕竟,你是在 3 个 VC 之间传递信息。
我使用了 unwind segue,但奇怪的是,当我从 unwind 导航到 newVC 时,我导航(推)了一会儿到 newVC,然后它把我推回到 sourceVC @Sweeper
@KyleFernandes 嗯...这确实很奇怪。您是否正确连接了segue?请记住连接 视图控制器,而不是视图控制器中的特定视图。你应该先尝试自己解决。如果您真的无法解决,请在您的代码和您尝试过的内容中发布另一个问题。
我在 0.01 秒后用计时器运行了这个函数,然后这个问题被修复了@Sweeper以上是关于如何从 popoverpresentation 视图控制器导航到另一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
如何从持久存储中获取数据并显示在自定义表格视单元上?有没有示例代码?
如何从 Google bigquery(google-cloud-ruby gem)的视图表(具有 resource_full)中获取数据