如何从 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)中获取数据

django rest框架中的泛型与视图集,如何选择使用哪一个?

今年要净赚10亿?还有点亏估值在降的乐视影业未来会如何

从单个查询创建多个视图表

无法将查询另存为视图表