【问题标题】:One segue to rule them all一个segue来统治他们
【发布时间】:2017-04-26 13:47:29
【问题描述】:

我的故事板中有 4 个 ViewController。我希望他们所有人都能够通过 performSegue 访问我的“设置”视图控制器。 是否可以让一个 segue 执行此操作,而不是从每个 ViewController 中按 ctrl + 拖动到我的“设置”ViewController?

【问题讨论】:

  • 如果你想使用一个转场,那么从每个源到目的地都需要一个转场。或者,您可以只实例化设置视图控制器并在不使用 segue 的情况下推送/呈现它
  • 我害怕这个答案。我必须将所有四个控制器的 segues 拖到同一个控制器上这一事实非常丑陋,但如果我必须这样做,我会

标签: ios swift2 segue


【解决方案1】:

不,它不可能用一个单一的segue。你需要来自 4 个不同的ViewControllers 的 4 个不同的 segue。但您可以通过编程方式完成此操作。

UIVIewController做一个扩展

extension UIViewController
{
    func showSettingsScreen()
    {
        let storyBoard = UIStoryboard(name: "YourStoryBoardName", bundle:nil)
        let settingsScreen = storyBoard.instantiateViewControllerWithIdentifier("YourSettingsViewControllerID")
        self.navigationController?.pushViewController(settingsScreen, animated: true)
    }
}

现在您可以从任何视图控制器调用showSettingsScreen()(确保此视图控制器具有导航控制器)。

【讨论】:

  • 这可能真的有效。我会在电脑上试一试。
【解决方案2】:

你不能那样做。一个转场只有一个来源和一个目的地。您可以以编程方式实例化您的设置 ViewController 并通过使用 push 或使用 present 来显示它。你应该想到的是为什么你必须从这么多地方去设置。这可能是糟糕设计和重复代码的标志。通常应用程序只有一个这样的按钮/动作,可以从多个屏幕(通过使用某种容器视图实现)或仅从一个屏幕访问。

【讨论】:

    【解决方案3】:

    我真的不认为有办法做到这一点。你应该将你的 SettingsViewController 连接到你所有的 4 个视图控制器,添加 segue 并定义一个用于

    的 segue 标识符
    prepareForSegue:sender: 
    or  
    shouldPerformSegueWithIdentifier:sender: 
    

    方法。 U 可以通过这些标识符访问 segue。如果您发现“ctrl + 从每个 ViewController 拖动到“设置”ViewController“任务繁重,您也可以选择导航控制器。你只需要在你的故事板中嵌入导航控制器并为每个视图控制器定义故事板 ID,你就完成了。只需使用要实例化的视图控制器的故事板 id 就可以了。

    ViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController"];
    [self.navigationController pushViewController:vc animated:YES];
    

    除了分配故事板ID,您不必担心故事板,没有ctrl+拖动。

    我想到了一种更优雅的解决方案,即使用容器视图。在显示每个 ViewController 时,您可以在 Container View Controller 中使用按钮进行切换,SettingsViewController 是常见的。 快乐编码..

    【讨论】:

      【解决方案4】:

      有一种方法可以做到这一点。创建一个根视图控制器和包含单个嵌入式视图的匹配视图。将您的 segue 添加到此根控制器。然后在您的应用程序中,您使用标准子容器技术切换其他视图控制器。这几乎就是 UINavigationControllers 使用的概念。

      这样做的一个好处是,如果您想拥有对所有控制器可见的公共元素,那么您可以将它们添加到您的根控制器中。

      但这一切都取决于您要达到的目标。

      【讨论】:

        猜你喜欢
        • 2013-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-25
        • 2014-08-07
        • 1970-01-01
        • 2016-08-22
        相关资源
        最近更新 更多