self.navigationController pushViewController: 动画:给我一个黑屏

Posted

技术标签:

【中文标题】self.navigationController pushViewController: 动画:给我一个黑屏【英文标题】:self.navigationController pushViewController: animated: gives me a black screen 【发布时间】:2015-11-11 13:28:32 【问题描述】:

我正在使用 Objective-C。我的 .m 文件中有这段代码。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath

    detailViewController *detail = [[detailViewController alloc]init];
    [self.navigationController pushViewController:detail animated:YES];

我在情节提要中创建了我的细节视图控制器场景。看起来像这样 [

每次我在模拟器中运行它并点击其中一个 tableview 单元格时,它都会将屏幕推到一个完全黑屏,如下所示:

有人可以帮助我吗?非常感谢!

【问题讨论】:

显然您的应用程序已停止,因为它无法加载 nib 文件。为什么不与我们分享错误消息? 为什么不用segue? 【参考方案1】:

是的,它会给出一个空白屏幕,因为您没有在 detailViewController 类上附加任何视觉解释。

使用这个方法

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
DetailViewController *vc = [sb instantiateViewControllerWithIdentifier:@"detailViewController"];
[self.navigationController pushViewController:vc animated:YES];

您必须通过单击视图控制器来设置情节提要 ID,并设置情节提要 ID,如图所示

注意:对于上面的图片,将 Storyboard id“MessagingVC”替换为“detailViewController”

【讨论】:

如果当前视图控制器是从同一个故事板加载的,你想使用self.storyboard而不是重新加载它。 @Usama,而不是在身份检查器中设置“MessagingVC”故事板 ID,它应该是“detailViewController”,就像在代码中调用一样。 是的,应该是这样,我只是附上了当前在我的电脑上打开的屏幕图片,只是为了提供一个想法。更新了答案,感谢提及【参考方案2】:

使用情节提要时,您不想使用alloc+init 来创建视图控制器。相反,您需要在 Interface Builder 中分配 Storyboard ID,然后使用:

[self.storyboard instantiateViewControllerWithIdentifier:my_identifier];

更好的选择可能是在 table view 控制器上设置 push segue。这将导致实例化和推送自动发生。如果需要,您可以覆盖 prepareForSegue:sender: 来设置属性。

【讨论】:

以上是关于self.navigationController pushViewController: 动画:给我一个黑屏的主要内容,如果未能解决你的问题,请参考以下文章

self.navigationController.tabBarController.selectedIndex 不起作用

self.navigationController 在 swift 中为零

self.navigationController 分配为 RootViewController 后为空?

iOS 开发:为啥 self.navigationController.navigationBar.frame.size.height 返回零?

Objective-C:使用 self.navigationController 和自定义 UINavigationController

使用 self.navigationController.hidesBarsOnSwipe = true 隐藏导航栏,将其永久隐藏