我有一个在navController中嵌入了mapViewController的应用程序。在mapVC ive中有一个单独的按钮按钮项,单击该按钮时,我想有条件地“推”到多个不同的视图控制器之一。要实现这一目标,请在按钮上设置一个ibaction,并在相关的按钮ibaction方法中添加条件“ performSegueWithIdentifier”代码,即
@IBAction func addButtonClicked(sender: UIBarButtonItem) {
let lastAdd = "addItem"
if lastAdd == "addItem"{
self.performSegueWithIdentifier("addItem", sender: self)
} else {
self.performSegueWithIdentifier("addEvent", sender: self)
}
}
这将带我到addItemVC或addEventVC。在每个viewControllers中(即addItemVC和addEventVC),我希望在导航栏中有一个分段控件,当单击该控件时,它将带我到备用VC,即如果当前显示了addItemVC,并且分段的addEvent部分单击控件,我要显示addEventVC。我按照Red Artisans page进行操作,但是在他的示例中,他正在实例化应用程序委托中的所有视图控制器选项,因此可以轻松获取对每个视图控制器的引用,并将其链接到他的rootVC中分段控件的单击段
im困惑的地方是..在执行每个segue之前使用条件代码查看Im,我假设当按下bar按钮项目时,im只实例化一个viewController。因此,如何获取一组视图控制器以传递给VC,以便可以在该VC中创建所需的分段控件。我假设我可以在mapViewController中手动创建目标VC数组并将其传递给其他对象,但这是否意味着将实例化为由segue流程自动创建的实例呢?
最佳答案
是的,您是对的:如果您在mapViewController中手动创建两个VC,则它们将是与segue创建的实例不同的实例。因此,如果您要坚持使用Red Artisan的解决方案,请使用代码而不是segues展示VC。您仍然可以在情节提要中设计两个VC,为它们分别指定一个唯一的标识符,然后使用instantiateViewControllerWithIdentifier
的self.storyboard
函数创建实例。
您可以在mapViewController中使用Red Artisan的大多数应用程序委托代码,但要进行一些调整:使用现有的导航控制器(嵌入了mapViewController的导航控制器),并且[window ...]
行是多余的。需要注意的是indexDidChangeForSegmentedControl
函数,该函数假定您要切换的VC是导航控制器的rootViewControllers(即,它们是导航控制器的viewControllers
数组中的唯一项)。在您的情况下,您将mapViewController用作(我假设)rootViewController,因此您必须修改indexDidChangeForSegmentedControl
函数以创建一个数组,其中mapViewController的索引为0,相关的(addItem或addEvent)VC的索引为1。不知道这种方法的动画效果如何,也不知道是否可以正确设置后退按钮等。
如果要坚持使用segues,则有两种解决方案:一种方法是使用UITabBarController
(并隐藏tabBar)。您将把addItem和addEvent VC作为单独的选项卡,当您选择tabBarController时,可以设置选择哪个选项卡。但是我的首选解决方案是选择UIPageViewController
。您可以在mapViewController中创建VC,并将它们作为segue的一部分传递,或者只传递关于选择了哪个VC的指示器,然后让pageViewController实例化它们并显示相关的VC。然后,您可以使用UISegmentedControl
触发VC之间的切换。参见this answer类似的内容。
关于ios - Swift-使用分段控件导航到不同的 View Controller ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27049630/