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 隐藏导航栏,将其永久隐藏