从模态视图中删除呈现视图

时间:2012-11-04 12:39:21

标签: objective-c ios cocoa-touch cocoa

我有一个像这样的视图层次结构: MainView - > SubView(PresentingView) - > ModalViewc(UIViewController的所有子类)

通过单击ModalView中的按钮,我想删除ModalView和PresentingView,这样我就可以返回MainView,然后呈现ModalViewX:

MainView - > ModalViewX(UIViewController的所有子类)

[[self presentingViewController] removeFromParentViewController];

上面的代码简单地解除了ModalView,但仍然保留了PresentingView。

我的最终目标是让ModalView按钮在返回MainView之前执行一些结束逻辑。单击该按钮基本上将执行以下操作:

  1. 结论逻辑
  2. 删除self(ModalView)和PresentingView(如果我可以为删除设置动画,则为奖励点)
  3. 告诉MainView呈现ModalViewX (也许我将不得不以某种方式调用ModalView中的第3步 - > viewDidUnload方法)
  4. 有关如何执行此操作的建议?

2 个答案:

答案 0 :(得分:1)

首先,将整个项目嵌入到UINavigationController中,MainViewController作为rootview。要从MainViewControllerSubViewController,请执行以下操作:

- (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

希望有所帮助。