iOS推送ViewController不起作用

Posted

技术标签:

【中文标题】iOS推送ViewController不起作用【英文标题】:iOS Pushing a ViewController not working 【发布时间】:2013-02-12 18:38:57 【问题描述】:

我已经阅读了很多类似的问题,但我无法弄清楚为什么视图不起作用。我已经花了四个小时来解决这个问题,所以我认为是时候寻求帮助了。

我的主要 VC 代码是一个 UITableView,在 didSelectRowAtIndexPath 中使用了这个方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    NSLog(@"%s", __FUNCTION__);
    svc = [[SubViewController alloc] initWithNibName:@"SubView" bundle:nil];
    //UINavigationController *nc = [[UINavigationController alloc] init];

    switch (indexPath.section) 
    case 0 :
            switch (indexPath.row) 
            case 0 :
                    NSLog(@"0");
                    svc.label.text  = @"Item";
                    break;

                case 1:
                    NSLog(@"1");
                    svc.label.text  = @"Category";
                    break;
            
            break;
    NSLog(@"2");        
    case 1 : svc.title  = @"Second Cell"; break;
    case 2 : svc.title = @"Third Cell"; break;
    case 3 : svc.title = @"Image"; break;
    case 4 : svc.title = @"Notes"; break;
            NSLog(@"3");
            break;
    
    NSLog(@"4");
    //svc = [[SubViewController alloc] init];

    NSLog(@"svc is %@", svc);
    UINavigationController *nc = [[UINavigationController alloc] initWithNibName:@"SubView" bundle:nil];
                        //initWithRootViewController:svc];

    [nc pushViewController:svc animated:YES];

    NSLog(@"self.navigation is as %@",nc);
    NSLog(@"5");
    [tableView deselectRowAtIndexPath:indexPath animated:NO];

你也可以看到我尝试过的。输出日志显示:

2013-02-12 13:32:22.858 CollapsableTableView[35122:c07] -[ViewController tableView:didSelectRowAtIndexPath:]
2013-02-12 13:32:22.859 CollapsableTableView[35122:c07] -[SubViewController initWithNibName:bundle:]
2013-02-12 13:32:22.860 CollapsableTableView[35122:c07] wtf
2013-02-12 13:32:22.860 CollapsableTableView[35122:c07] 0
2013-02-12 13:32:22.860 CollapsableTableView[35122:c07] 4
2013-02-12 13:32:22.861 CollapsableTableView[35122:c07] svc is <SubViewController: 0x10363070>
2013-02-12 13:32:22.863 CollapsableTableView[35122:c07] self.navigation is as <UINavigationController: 0x101608b0>
2013-02-12 13:32:22.863 CollapsableTableView[35122:c07] 5

所以找到了 SubView,但没有加载..任何想法都会受到重视。谢谢

更新。服用 cmets 后(谢谢 :))我的代码现在看起来像这样,但仍然没有问题......

svc = [[SubViewController alloc] initWithNibName:@"SubView" bundle:nil];


UINavigationController *nc = self.navigationController;


switch (indexPath.section) 
case 0 :
        switch (indexPath.row) 
        case 0 :
                NSLog(@"0");
                svc.label.text  = @"Item";
                break;

            case 1:
                NSLog(@"1");
                svc.label.text  = @"Category";
                break;
        
        break;
NSLog(@"2");        
case 1 : svc.title  = @"Second Cell"; break;
case 2 : svc.title = @"Third Cell"; break;
case 3 : svc.title = @"Image"; break;
case 4 : svc.title = @"Notes"; break;
        NSLog(@"3");
        break;

NSLog(@"4");
//svc = [[SubViewController alloc] init];

NSLog(@"svc is %@", svc);

 [nc pushViewController:svc animated:YES];
//pushViewController:svc animated:YES];

NSLog(@"self.navigation is %@",nc);
NSLog(@"5");

【问题讨论】:

is 'SubView' 是 'SubViewController' 的 nib 文件吗? 您正在创建一个新的导航控制器,而不是使用已经在视图中的那个。您正在创建的导航是不可见的,所以它看起来不像是在推动任何东西 @RenoJones:SubView 是笔尖的名称。 @ColdLogic。当我简单地使用 self.navigationcontroller 时,我得到了相同的结果。也许如果你添加一个代码sn-p,我可以看看我是否又做了一些愚蠢的事情。 哦,显然您需要在进入当前屏幕之前添加导航控制器。您现在所在的屏幕。 (一个带表视图)。在进入此屏幕之前,通过在此屏幕上按下或如果它是第一个控制器,当您在 didfinishlaunching 中将其添加到窗口时,请执行以下操作: UINavigationController *navCont = [[UINavigationController alloc] initWithNibName:@"yourcurrentcontrollerobject" bundle:nil ];然后将 navCont 传递给窗口(如果它是您的第一个控制器),或者将 navCont 传递给将您推到当前屏幕的人。希望我很清楚。干杯。 【参考方案1】:

在创建这个视图之前添加一个导航控制器(APP DELEGATE)等等。然后将此视图作为导航控制器的根。

最后。 self.navigationController pushViewController:(UIViewController*) animated:(BOOL) 我认为这会成功。 如果您不确定如何添加导航控制器,请使用根视图控制器搜索 init 以获取导航控制器。

但是,如果您的意思是在此处添加一个新的视图控制器,那么您是正确的,只是忘记将子视图添加到主视图中。

【讨论】:

宾果游戏。非常感谢。【参考方案2】:
UINavigationController *nc = [[UINavigationController alloc] initWithNibName:@"SubView" bundle:nil];

将其替换为:

UINavigationController *nc = self.navigationController;

您正在创建一个全新的UINavigationController。您需要使用您拥有的并推送到它。

注意

即使您正在创建一个新的UINavigationController,您也不会使用视图控制器 nib。您将使用您评论的代码为新的UINavigationController 设置rootViewController

【讨论】:

谢谢 Ryan,我现在有这个代码: svc = [[SubViewController alloc] init]; NSLog(@"svc 是 %@", svc); UINavigationController *nc = self.navigationController; //initWithRootViewController:svc]; [nc pushViewController:svc 动画:YES];但是得到这个日志: 2013-02-12 13:48:33.642 CollapsableTableView[35341:c07] svc is 2013-02-12 13:48:33.642 CollapsableTableView[35341:c07] self.navigation is as (空) 这意味着你根本没有navigationController。您需要在主 VC 之前创建一个,并将主 VC 设置为 root。 嗯。我正在用当前代码更新我的问题 - 输出日志与我的上一条评论相同.. nc还是null吗?您是否在 AppDelegate 中创建了 UINavigationController 我刚刚做到了..宾果游戏!我希望你不介意,但 Prajwal Udupa 给了我确切的答案(而且他是新人),所以我会给他解决方案的功劳。

以上是关于iOS推送ViewController不起作用的主要内容,如果未能解决你的问题,请参考以下文章

从侧面菜单推送 ViewController 不起作用

iOS - performSegueWithIdentifier 不起作用?

当应用程序完全关闭时,推送通知点击上的推送 ViewController 将不起作用

在 ViewController 之间推送数据不起作用

推送在导航控制器(故事板)中不起作用

推送新的视图控制器(以编程方式)不起作用?为啥?