ViewController addSubview

我几乎要疯了:

GolOlurActionViewController *golOlur = [[GolOlurActionViewController alloc] init]; [self.view addSubview:golOlur.view]; 

我有上面的代码,我在一个ViewController中的IBACtion调用它。 GolOlurActionViewController是一个ViewController ,你可以猜到。

当这个过程开始时,golOlur的viewDidLoadviewDidAppear方法被调用,但是这个视图不会被显示。

我已经尝试了我所知道的一切,但无法解决这个问题。

如果你的意图是在视图之间转换,你真的不应该使用addSubview 。 如果这样做,您将不会收到旋转事件,因为您允许视图控制器层次结构与视图层次结构不同步。 你应该使用addSubview来添加一个真正的子视图(例如UILabelUIImageViewUIButton等,或者子视图,如果做适当的视图控制器包含等等)到一个视图。 在视图之间转换时使用addSubview表示视图控制器和视图之间的基本混淆。

正确pipe理视图的关键是确保视图控制器层次结构与视图层次结构同步。 最简单的方法是在视图控制器之间进行转换,并让他们处理视图的表示。 因此,如果您使用的是NIB,通常会是:

 GolOlurActionViewController *golOlur = [[GolOlurActionViewController alloc] initWithNibName:nil bundle:nil]; [self presentViewController:golOlur animated:YES completion:nil]; 

或者,带有导航控制器的NIB:

 GolOlurActionViewController *golOlur = [[GolOlurActionViewController alloc] initWithNibName:nil bundle:nil]; [self.navigationController pushViewController:golOlur animated:YES]; 

或者,如果你使用的是故事板(如果你使用的是故事板,那么你可能会使用segues,并不需要这些,但只是为了完整性):

 GolOlurActionViewController *golOlur = [self.storyboard instantiateViewControllerWithIdentifier:@"GolOlurActionView"]; [self presentViewController:golOlur animated:YES completion:nil]; 

如果您的故事板正在使用导航控制器:

 GolOlurActionViewController *golOlur = [self.storyboard instantiateViewControllerWithIdentifier:@"GolOlurActionView"]; [self.navigationController pushViewController:pushViewController:golOlur animated:YES]; 

在不太可能发生的情况下,你试图做控制器遏制,让我们知道,因为这是略有不同的(需要调用addChildViewControllerdidMoveToParentViewController ),但如果你做视图之间的基本转换,控制器的正确初始化和后续调用presentViewControllerpushViewController应该为你做。

更新:

简单地说,如果你正在使用storyboard(我不认为你是,但以防万一),而不是instantiateViewControllerWithIdentifier ,我可能实际上build议你在故事板上定义一个segue,提供一个标识符string在接口生成器,然后使用下面的代码转换到下一个场景:

 [self performSegueWithIdentifier:@"yourIdentifier" sender:self]; 

如果你这样做,它会照顾为你实例化你的控制器,你的整个应用程序的stream程将被准确地表示在故事板中。

我相信你的问题是,当你创build一个UIViewController的时候,你正在等待storyboard或者.xib中的视图,这是行不通的。 您需要在故事板中连接一个push segue(这将需要一个UINavigationController ),或者以模态方式呈现新的控制器,您也可以在故事板中进行操作。 如果你有这个ViewController的笔尖,你可以这样做:

  CustomViewController *controller = [[CustomViewController alloc] initWithNibName:@"CustomViewController.xib" bundle:[NSBundle mainBundle]]; [self presentViewController:controller animated:YES completion:NULL];