ViewController addSubview
我几乎要疯了:
GolOlurActionViewController *golOlur = [[GolOlurActionViewController alloc] init]; [self.view addSubview:golOlur.view];
我有上面的代码,我在一个ViewController
中的IBACtion
调用它。 GolOlurActionViewController
是一个ViewController
,你可以猜到。
当这个过程开始时,golOlur的viewDidLoad
和viewDidAppear
方法被调用,但是这个视图不会被显示。
我已经尝试了我所知道的一切,但无法解决这个问题。
如果你的意图是在视图之间转换,你真的不应该使用addSubview
。 如果这样做,您将不会收到旋转事件,因为您允许视图控制器层次结构与视图层次结构不同步。 你应该使用addSubview
来添加一个真正的子视图(例如UILabel
, UIImageView
, UIButton
等,或者子视图,如果做适当的视图控制器包含等等)到一个视图。 在视图之间转换时使用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];
在不太可能发生的情况下,你试图做控制器遏制,让我们知道,因为这是略有不同的(需要调用addChildViewController
和didMoveToParentViewController
),但如果你做视图之间的基本转换,控制器的正确初始化和后续调用presentViewController
或pushViewController
应该为你做。
更新:
简单地说,如果你正在使用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];