我有一个 HomeView 和一个 HomeDropDownView。
HomeDropDownView 显示为 HomeView 上方的下拉视图。
HomeView 是 HomeDropDownView 的代表。
当我在 HomeDropDownView 中执行操作时,我想在 HomeView 中调用委托方法并让该委托方法呈现第三个视图控制器,即来自其导航控制器的 TestViewController。
如果我尝试从类中的任何位置启动 TestViewController ,它工作正常 - 除了委托方法。
HomeDropDownView 中有动画,但在编译中调用委托方法不会使视图控制器出现。在我使用这个动画的情况下,无论如何都不会触发;只有没有动画的调整大小。
TestViewController 的 init 和 viewDidLoad 一样被调用,但没有 viewWillAppear 并且视图不会出现。
代码:
主页下拉查看
- (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 或任何其他线程中找不到原因。谢谢您的帮助!