我有一个自定义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。 其他一切都只是代码。
答案 0 :(得分:0)
委托方法- (void)cellFooterViewTapped:(NSInteger)index
应位于UIViewController
中,以便您可以在其导航控制器中推送新的UIViewController
。
此外,应将当前UIViewController
推送/添加到现有导航控制器堆栈。如果UIViewController
中尚未添加navigationController
,则它将为空。
答案 1 :(得分:0)
您的故事板结构应如下图所示。导航控制器必须是您的根控制器。并将主视图控制器作为导航控制器的根连接,如图所示。然后你可以推动任何控制器。并且您不必在appDidFinishLaunching
中编写任何代码,因为一切都在故事板中连接。
答案 2 :(得分:0)
我找到了一个解决方案,你无法使用此代码
随处获得navigationControllerUINavigationController *nav = [[[UIApplication sharedApplication] delegate] window].rootViewController
答案 3 :(得分:-1)
你可能有非navigationController
。
您应该将self
推送到navigationController's
堆栈中,以便拥有navigationController
。