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 isnull
吗?您是否在 AppDelegate
中创建了 UINavigationController
?
我刚刚做到了..宾果游戏!我希望你不介意,但 Prajwal Udupa 给了我确切的答案(而且他是新人),所以我会给他解决方案的功劳。以上是关于iOS推送ViewController不起作用的主要内容,如果未能解决你的问题,请参考以下文章
iOS - performSegueWithIdentifier 不起作用?