2012-11-04 93 views
0

我有一个这样的视图层次: 的MainView - >子视图(PresentingView) - > ModalViewc(所有的UIViewController子类)去除模态呈现视图查看

通过点击在ModalView一个按钮,我想删除这两个的ModalView和PresentingView所以可以返回到其然后本ModalViewX所述的MainView:

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

[[self presentingViewController] removeFromParentViewController]; 

上面的代码简单地驳回模态观点但呈现观点依然存在。

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

  1. 结论的逻辑
  2. 删除自身(ModalView)和PresentingView(bonuspoints如果我可以动画删除)
  3. 泰尔的MainView呈现ModalViewX (也许我会必须以某种方式在ModalView - > viewDidUnload方法中调用第3步)

有关如何执行此操作的建议?

+0

你称之为“视图”,然后显示与视图**控制器**相关的代码。你真的在做什么? –

+0

UIView或UIViewController是SubView和ModalView的子类吗? – Martol1ni

+0

UIViewController的子类。 – Wollan

回答

1

首先,将您的整个项目以MainViewController作为rootview嵌入到UINavigationController中。要获得从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]

另一种方法是使用塞格斯,在那里你CTRL+drag从按钮到下一个的UIViewController。然后应该在方法- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender中设置要完成的逻辑,其中destionationcontroller为segue.destinationViewController

这样,您还可以通过将自定义的seguestyle设置为子类UISegue来添加自定义动画。

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

希望有所帮助。

相关问题