从自定义委托调用self.navigationController会导致null

时间:2014-07-23 08:16:17

标签: ios xcode uinavigationcontroller

我有一个自定义UIScrollView,并且在点击单元格的页脚时创建了一个自定义delegate,我想在发生这种情况时启动ViewController

- (void)cellFooterViewTapped:(NSInteger)index
{
ProfiliViewController *profiliView = [[ProfiliViewController alloc]init];
[self.navigationController pushViewController:profiliView animated:YES];
}

单击的单元格的索引正确传递,这意味着正在调用该方法。 只是navigationController不起作用,我也NSLogged它并打印null。 它能是什么?我在主ViewController上有4个其他按钮,使用相同的代码,它不是空的。

这是我的didFinishLaunchingWithOptions

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
ViewController *_switchviewcontroller = [[ViewController alloc]init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:_switchviewcontroller];
[self.window addSubview:navController.view];

[self.window makeKeyAndVisible];

[[UISwitch appearance] setOnTintColor:[UIColor colorWithRed:0.204 green:0.286 blue:0.368 alpha:1.0]];
return YES;
// Override point for customization after application launch.
}

还在故事板中声明了NavigationController和Main ViewController。 其他一切都只是代码。

4 个答案:

答案 0 :(得分:0)

委托方法- (void)cellFooterViewTapped:(NSInteger)index应位于UIViewController中,以便您可以在其导航控制器中推送新的UIViewController

此外,应将当前UIViewController推送/添加到现有导航控制器堆栈。如果UIViewController中尚未添加navigationController,则它将为空。

答案 1 :(得分:0)

您的故事板结构应如下图所示。导航控制器必须是您的根控制器。并将主视图控制器作为导航控制器的根连接,如图所示。然后你可以推动任何控制器。并且您不必在appDidFinishLaunching中编写任何代码,因为一切都在故事板中连接。

enter image description here

答案 2 :(得分:0)

我找到了一个解决方案,你无法使用此代码

随处获得navigationController
UINavigationController *nav = [[[UIApplication sharedApplication] delegate] window].rootViewController

答案 3 :(得分:-1)

你可能有非navigationController。 您应该将self推送到navigationController's堆栈中,以便拥有navigationController