一个赛格来统治他们所有人



我的故事板中有4个ViewControllers。我希望他们都能通过performSegue访问我的"设置"ViewController。是否可以用一个片段来执行此操作,而不是用ctrl+从每个ViewController拖动到我的"设置"ViewController?

不,这是不可能用单个segue实现的。您需要来自4个不同ViewControllers的4个不同分段。但你可以用程序来做。

UIVIewController 进行扩展

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

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

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

我真的不认为有这样的方法。你应该将你的SettingsViewController连接到你的所有4个视图控制器,添加segue,并定义一个在中使用的segue标识符

prepareForSegue:sender: 
or  
shouldPerformSegueWithIdentifier:sender: 

方法。U可以通过这些标识符访问段。如果你发现"ctrl+drag from each and each ViewController to"Settings"ViewController"tasky,你也可以选择Navigation Controller。你只需要在情节提要中嵌入导航控制器,并为每个视图控制器定义情节提要Id,你就完成了。只需使用视图控制器的序列图像板id进行实例化,然后就可以了。

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

除了分配故事板id,你不必担心故事板,没有ctrl+拖动的事情。

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

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

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

但这一切都取决于你想要实现什么。

最新更新