iOS代理不推送或显示视图

时间:2013-10-07 17:23:25

标签: ios delegates presentmodalviewcontroller pushviewcontroller

我有一个HomeView和一个HomeDropDownView。

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

HomeView是HomeDropDownView的代表。

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

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

HomeDropDownView中有动画,但是在complition中调用delegate方法不会使视图控制器出现。在我正在使用它的情况下,动画也不会发射;只有没有动画的大小调整。

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.");
    }
}

HomeView

- (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,所有子视图,包括导航控制器似乎都在那里。这是基于tabcontroller的项目,但我认为上述任何一种都是可以接受的方式来调用导航控制器。

我错过了什么?为什么我的委托方法不想在HomeView的Nav控制器上推/出一个viewcontroller?这可能是我缺少的东西,但我无法在Apple Docs或任何其他线程中找到原因。 谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

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