我的故事板中有4个ViewControllers。我希望他们所有人都能通过performSegue访问我的“设置”ViewController。 有没有可能有一个segue来执行此操作,而不是从每个ViewController ctrl +拖动到我的“设置”ViewController?
答案 0 :(得分:3)
单个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()
(确保此视图控制器具有导航控制器)。
答案 1 :(得分:0)
我真的不这么认为有办法这样做。你应该将你的SettingsViewController连接到你的所有4个视图控制器,添加segue,并定义一个用于
的segue标识符prepareForSegue:sender:
or
shouldPerformSegueWithIdentifier:sender:
方法。你可以通过这些标识符访问segues。如果您发现“ctrl +从每个ViewController拖动到”设置“ViewController”任务,您也可以选择导航控制器。你只需要在故事板中嵌入导航控制器,并为每个视图控制器定义故事板ID,你就完成了。只需使用视图控制器的storyboard id进行实例化,你就可以了。
ViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController"];
[self.navigationController pushViewController:vc animated:YES];
除了分配故事板ID之外你不必担心故事板,没有ctrl +拖动东西。
我想到了一个更优雅的解决方案,即使用Container View。在显示每个ViewController的同时,您可以在Container View Controller中使用按钮切换SettingsViewController。 快乐的编码..
答案 2 :(得分:0)
你做不到。 segue只有一个源和一个目的地。您可以以编程方式实例化您的设置ViewController
,并使用推送或使用礼物显示它。你应该想到的是为什么你必须从很多地方去设置。这可能是设计糟糕和代码重复的标志。通常,应用程序只有一个这样的按钮/操作,可以从多个屏幕(通过使用某种容器视图实现)或仅从一个屏幕访问。
答案 3 :(得分:0)
有一种方法可以做到这一点。创建根视图控制器和包含单个嵌入视图的匹配视图。将您的segue添加到此根控制器。然后在您的应用程序中,使用标准子容器技术切换其他视图控制器。这几乎是UINavigationControllers使用的概念。
这样做的一个优点是,如果您想拥有所有控制器都可见的公共元素,那么您可以将它们添加到根控制器。
但这一切都取决于你想要达到的目标。