我有一个像这样的视图层次结构: MainView - > SubView(PresentingView) - > ModalViewc(UIViewController的所有子类)
通过单击ModalView中的按钮,我想删除ModalView和PresentingView,这样我就可以返回MainView,然后呈现ModalViewX:
MainView - > ModalViewX(UIViewController的所有子类)
[[self presentingViewController] removeFromParentViewController];
上面的代码简单地解除了ModalView,但仍然保留了PresentingView。
我的最终目标是让ModalView按钮在返回MainView之前执行一些结束逻辑。单击该按钮基本上将执行以下操作:
有关如何执行此操作的建议?
答案 0 :(得分:1)
首先,将整个项目嵌入到UINavigationController中,MainViewController
作为rootview。要从MainViewController
到SubViewController
,请执行以下操作:
- (IBAction) theButtonClicked : (id) sender {
SubViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"YourIdentifier"];
[self.navigationController pushViewController:vc animated:YES];
}
这将使您进入下一个UIViewController。如果您想传递信息,只需设置vc setVariable:
。
要返回rootview,只需致电[self.navigationController popToRootViewControllerAnimated:YES]
另一种方法是使用segues,从按钮到下一个UIViewController CTRL+drag
。然后应该在方法- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
中设置要完成的逻辑,其中destionationcontroller是segue.destinationViewController
。
这样,您还可以通过将seguestyle设置为custom并将UISegue
子类化来添加自定义动画。
答案 1 :(得分:1)
对于步骤1(即“结束逻辑”),使用目标动作设计。具体来说,这意味着您将在特定事件发生时将调用的对象上添加方法。例如,这可以通过控制 - 从故事板拖动到视图控制器中来完成。您选择的视图控制器是目标,您创建的方法是操作。更多详情请点击此处:https://developer.apple.com/library/mac/#documentation/General/Conceptual/Devpedia-CocoaApp/TargetAction.html。
要控制视图控制器的流程,您有几个不同的选项。
对于模态视图控制器,最好将删除委托给呈现视图控制器。这意味着模态视图控制器具有称为委托的属性,当模态视图控制器准备好被移除时,该属性将接收消息(即,模态视图控制器不自行移除)。该委托应该符合您创建的协议,可以处理任何相关的结束逻辑并调用dismissViewControllerAnimated,这将删除呈现的(模态)视图控制器。
或者,您可以使用故事板中的segues来管理流程,如Martol所述。
有关管理视图控制器数据和流的这些方法的更多详细信息,请查看:http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ManagingDataFlowBetweenViewControllers/ManagingDataFlowBetweenViewControllers.html
希望有所帮助。