Ios 从自定义委托调用self.navigationController将导致null
我有一个自定义的Ios 从自定义委托调用self.navigationController将导致null,ios,xcode,uinavigationcontroller,Ios,Xcode,Uinavigationcontroller,我有一个自定义的UIScrollView,我在单击单元格的页脚时创建了一个自定义的delegate,我想在这种情况下启动一个ViewController - (void)cellFooterViewTapped:(NSInteger)index { ProfiliViewController *profiliView = [[ProfiliViewController alloc]init]; [self.navigationController pushViewController:profi
UIScrollView
,我在单击单元格的页脚时创建了一个自定义的delegate
,我想在这种情况下启动一个ViewController
- (void)cellFooterViewTapped:(NSInteger)index
{
ProfiliViewController *profiliView = [[ProfiliViewController alloc]init];
[self.navigationController pushViewController:profiliView animated:YES];
}
已正确传递单击单元格的索引,这意味着正在调用该方法。
只是navigationController
不工作,我还记录了它并打印了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和主ViewController也在情节提要中声明。
其他一切都是代码。您可能有非
navigationController
。
您应该在
navigationController的堆栈中推送self
,这样您就可以拥有navigationController
委托方法-(void)cellFooterViewTapped:(NSInteger)索引
应位于UIViewController
中,以便您可以在其导航控制器中推送新的UIViewController
此外,当前的UIViewController
应推送/添加到现有导航控制器堆栈中。如果UIViewController
尚未添加到navigationController
中,它将为空。您的故事板结构应如下图所示。导航控制器必须是您的根控制器。并连接mainview控制器作为导航控制器的根,如图所示。然后你可以按任何控制器。而且你不必在appDidFinishLaunching中编写任何代码,因为故事板中的一切都是连接的
我找到了一个解决方案,使用此代码您无法在任何地方获得navigationController
UINavigationController *nav = [[[UIApplication sharedApplication] delegate] window].rootViewController
如果您的意思是[self.navigationController-pushViewController:self-animated:YES]代码>我尝试过,但多次推送同一视图控制器实例时出现此错误不受支持否。我的意思是viewController(self)是否在导航堆栈中。如果viewController(self)现在位于导航堆栈中,则您的问题不会发生,因此,我只想确保您曾经将viewController(self)推到过哪里。您的写入方式存在另一个问题,在启动应用程序时可能会导致一些警告。ViewController*_switchviewcontroller=[[ViewController alloc]init];UINavigationController*navController=[[UINavigationController alloc]initWithRootViewController:_switchviewcontroller];[self.window addSubview:navController.view];您应该使用self.window.rootViewController=navController而不是[self.window addSubview:navController.view];您能显示您的appdidfishLaunching
代码吗?所以我们可以知道你的导航堆栈。我编辑了这篇文章。请检查我做了什么,现在当我打开appagain时,我得到了一个空白屏幕。我忘了提到,我的NavigationController和主ViewController在情节提要上声明了-u-因为其他人启动了该项目。@Elgert oh ok。你应该补充一点,在你的问题中你正在使用故事板。这几乎和我的一样,一个导航控制器和一个主视图控制器,从那里我只推代码。但只有在该委托上,self.navigationController
为空。是否从appDidFinishLaunching
中删除代码?为什么要添加[self.window addSubview:navController.view]
?-(void)cellFooterViewTapped:(NSInteger)index
实际上在我的主UIViewController
上,它是同一个类,我有4个其他按钮,可以毫无问题地按不同的ViewController