使用 pushViewController 时,我的视图控制器未正确初始化?

Posted

技术标签:

【中文标题】使用 pushViewController 时,我的视图控制器未正确初始化?【英文标题】:My view controller not initializing properly when using pushViewController? 【发布时间】:2014-03-04 20:57:28 【问题描述】:

我有以下按钮作为我的 navigationRightBarItem:

UIBarButtonItem *menubutton1 = [[UIBarButtonItem alloc] initWithImage:menuimage1     style:UIBarButtonItemStylePlain target:self action:@selector(toCheckIn)];

-(void) toCheckIn
 NotificationsViewController *notificationViewController = [[NotificationsViewController alloc]init];
[self.navigationController pushViewController:notificationViewController animated:YES]; 

我尝试推送的视图控制器(通知控制器)由导航栏、标签和表格组成。当我按下按钮时,视图被推送但不完全。仅显示导航栏和标签,但表格仅显示为黑屏。

还有其他人碰巧遇到同样的事情吗?我该如何解决这个问题?

编辑:表格被拖到情节提要上,而标签和导航栏由代码完成。这可能是个问题吗?

【问题讨论】:

你应该从故事板生成你的 NotificationsViewController。或者更好的是,使用 à segue 【参考方案1】:

我认为有几件事会让你朝着正确的方向前进:

似乎您还没有在情节提要中创建从 SourceViewControllerNotificationsViewController 的转场。对于您正在做的事情,它将极大地简化流程。

要创建一个转场,您只需按住 CTRL 键单击您的SourceViewControllerUIBarButtonItem 并拖动到您的NotificationsViewController,松开,然后选择 push 作为转场类型。如果您需要将数据传递给NotificationsViewController,我还会在属性检查器中为这个segue 提供一个标识符,以便以后与prepareForSegue 一起使用。

现在,当您的UIBarButton 被推送时,NotificationsViewController 通过情节提要被实例化,然后被推送到 ViewController 堆栈中。

这也是我相信您没有在视图中看到您的UITableView 的原因,因为如果您只是将它拖到情节提要上并且没有将其设置为NotificationsViewController 的属性,则创建品牌代码中的新实例推送到 ViewController 堆栈将导致它只知道您在代码中添加的子视图。

【讨论】:

以上是关于使用 pushViewController 时,我的视图控制器未正确初始化?的主要内容,如果未能解决你的问题,请参考以下文章

使用 PushViewController 时选项卡不显示

SwiftUI - 使用“pushViewController”时出现致命错误

在 UITabController 中的选项卡之间切换时使用“pushViewController”动画

表视图中的 PushViewController

使用 NavigationController.PushViewController 的 BeginAnimations 和 CommitAnimations

pushViewController 在不同场景中调用时会导致不同的行为