iOS 委托不会推送或呈现视图



我有一个HomeView和一个HomeDropDownView。

HomeDropDownView显示为HomeView上的下拉视图。

HomeView是HomeDropDownView的代表。

当我在 HomeDropDownView 中执行操作时,我想在 HomeView 中调用委托方法,并让该委托方法从其导航控制器中呈现第三个视图控制器 TestViewController。

如果我尝试从类中的任何位置启动 TestViewController,它工作正常 - 除了委托方法。

HomeDropDownView 中有动画,但在编译中对委托方法的调用不会显示视图控制器。在我使用它的情况下,动画无论如何都不会触发;只有调整大小而没有动画。

TestViewController 的 init 确实被调用,以及 viewDidLoad 但不会调用 viewWillEmerge,并且视图剂量不会显示。

法典:

首页下拉视图

- (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 或将其放入按钮操作方法中,它将正常工作。 在调用委托方法的自身时,是 HomeView,所有子视图(包括导航控制器(似乎都在那里。 这是在一个基于选项卡控制器的项目中,但我认为上述任何一种都是调用导航控制器的可以接受的方法。

我错过了什么? 为什么我的委托方法不想在 HomeView 的导航控制器上推送/呈现视图控制器? 这可能是我错过的东西,但我在 Apple 文档或任何其他线程中找不到原因。感谢您的帮助!

可悲的是,事实证明,HomeView在消息执行下发生了更改。 因此,当 HomeView 收到消息调用时,它不再是最初请求操作的同一 HomeView 对象。 所以这不是同一个代表。这样做是为了让用户看到相同的视图用于不同的事情。但这是一个很好的例子,说明为什么你不应该破坏和重新创建批判性观点。 如果我们知道要发送消息,我们应该使用相同的视图并重新加载对象。 或者有一些控制结构的概念。

最新更新