【发布时间】:2013-10-07 17:23:25
【问题描述】:
我有一个 HomeView 和一个 HomeDropDownView。
HomeDropDownView 显示为 HomeView 上方的下拉视图。
HomeView 是 HomeDropDownView 的代表。
当我在 HomeDropDownView 中执行操作时,我想在 HomeView 中调用委托方法并让该委托方法呈现第三个视图控制器,即来自其导航控制器的 TestViewController。
如果我尝试从类中的 anywhere 启动 TestViewController,它可以正常工作 - 除了委托方法。
HomeDropDownView 中有动画,但是在编译中调用委托方法不会使视图控制器出现。在我使用这个动画的情况下,无论如何都不会触发;只有没有动画的调整大小。
TestViewController 的 init 和 viewDidLoad 一样被调用,但没有 viewWillAppear 并且视图不会出现。
代码:
HomeDropDownView
- (void)finalAction {
...
[self callDelegateAction];
...
- (void)calldelegateAction {
if ([self.delegate respondsToSelector:@selector(launchTestView)] ) {
[self.delegate launchTestView];
} else {
DLog(@"Error out to the user.");
}
}
主视图
- (void)launchTestView {
//[self listSubviewsOfView:self.parentViewController.view];
NSLog(@"delegate method | self: %@", self);
TestViewController *tvc = [[TestViewController alloc] initWithNibName:@"TestViewController" bundle:nil];
//[self.navigationController presentViewController:tvc animated:YES completion:nil];
//[self.view.window.rootViewController presentViewController:tvc animated:YES completion:nil];
//[self.navigationController pushViewController:tvc animated:YES];
AppDelegate *appdelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appdelegate.tabBarController.navigationController presentViewController:tvc animated:YES completion:^() {
NSLog(@"Done!");
}];
}
以上方法均无效。但是,如果我将完全相同的代码放入 viewDidAppear 或将其放入按钮操作方法中,它将正常工作。在调用委托方法的时候 self 是 HomeView 并且所有的子视图,包括导航控制器似乎都在那里。这是在一个基于 tabcontroller 的项目中,但我认为以上任何一种方式仍然可以调用导航控制器。
我错过了什么?为什么我的委托方法不想在 HomeView 的导航控制器上推送/呈现视图控制器?这可能是我缺少的东西,但我在 Apple Docs 或任何其他线程中找不到原因。 感谢您的帮助!
【问题讨论】:
-
HomeDropDownView 是模态视图控制器吗?如果是,即使您已经存在另一个模态视图,您也正在尝试显示模态视图。这是错误的。
-
请不要使用 appdelegate 来呈现视图控制器,这是一种非常糟糕的做法。
-
Kedar:不,它是一个始终“存在”并且在显示/隐藏时调整大小的视图。
-
Jeremie:我实际上并没有使用 appdelegate。该代码留在那里以显示所有已尝试和失败的方法,以帮助某人帮助我找到解决方案。任何想到的解决方案?谢谢
标签: ios delegates presentmodalviewcontroller pushviewcontroller