即使 UINavigation 栏存在,UIViewController 的内容也不会显示

Content of the UIViewController doesn't show up even though the UINavigation bar is there

所以我尝试使用导航控制器从一个 UIViewController 切换到另一个。我确信新控制器通过自定义 init 方法成功运行并创建了两个 UIBarButtons。但是,屏幕的内容(4 个标签、3 个文本字段、1 个 UIImageView)没有显示出来。相反,我只看到一个灰色屏幕。

通过ViewDidLoad、ViewWillLoad和ViewWillAppear传递NSLog消息表明这些都已成功执行。

如果您想看一下,这里是 gitHub 存储库: https://github.com/Killavata/Class_Discussion/tree/Stepan

这是我用来传递新控制器的代码:

// Create a new student and add it to the store
  Student* newStudent = [[StudentStore sharedStore] createStudent];

StudentDetailViewController *detailViewController = [[StudentDetailViewController alloc] initForNewStudent:YES];

detailViewController.student = newStudent;

detailViewController.dismissBlock = ^{
    [self.tableView reloadData];
};

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:detailViewController];

navController.modalPresentationStyle = UIModalPresentationFormSheet;

[self presentViewController:navController animated:YES completion:NULL];

您在故事板中制作了控制器,因此除非您从那里实例化它(使用 segue 或 instantiateViewControllerWithIdentifier:),否则您将无法获得它的视图。如果您想使用自定义 init 方法,那么您需要在代码中(在 loadView 中)制作整个 UI,或者在 xib 文件中制作视图,加载该 nib,并将视图设置为控制器的self.view.

另一种方法是不使用自定义初始化方法。创建一个 属性,isNew,并在实例化控制器之后但在呈现之前设置它的值。在viewDidLoad中检查它的值,把你现在的代码放在viewDidLoad中的init方法中。