我几乎要发疯了:
GolOlurActionViewController *golOlur = [[GolOlurActionViewController alloc] init];
[self.view addSubview:golOlur.view];我有上面的代码,我在ViewController中的IBACtion中调用它。正如你们都能猜到的那样,GolOlurActionViewController是一个ViewController。
当进程启动时,会调用golOlur的viewDidLoad和viewDidAppear方法,但不会显示视图。
我已经尝试了我所知道的一切,但还是解决不了这个问题。
发布于 2012-07-30 00:29:01
如果您的意图是在视图之间转换,那么您确实不应该使用addSubview。如果这样做,您将不会收到旋转事件,因为您允许视图控制器层次结构与视图层次结构不同步。您应该只使用addSubview来添加真正的子视图(例如,UILabel、UIImageView、UIButton等,或者,如果执行适当的视图控制器包含等,则添加子视图)。到一个视图。使用addSubview在视图之间转换表示视图控制器和视图之间的根本混淆。
正确管理视图的关键是确保视图控制器层次结构与视图层次结构同步。要做到这一点,最简单的方法是在视图控制器之间进行转换,并让它们负责视图的呈现。因此,如果你使用的是NIBs,它通常是:
GolOlurActionViewController *golOlur = [[GolOlurActionViewController alloc] initWithNibName:nil bundle:nil];
[self presentViewController:golOlur animated:YES completion:nil];或者,带有导航控制器的NIBs:
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的调用应该会为您做这件事。
更新:
顺便提一下,如果您正在使用故事板(我不这么认为,但只是以防万一),而不是instantiateViewControllerWithIdentifier,我实际上可能建议您在故事板上定义一个段,在接口生成器中为其提供一个标识符串,然后使用以下代码转换到下一个场景:
[self performSegueWithIdentifier:@"yourIdentifier" sender:self];如果你这样做,它会为你实例化你的控制器,整个应用的流程将准确地呈现在故事板中。
发布于 2012-07-30 00:29:45
我相信你的问题是,当你按照自己的方式创建.xib时,你会期望故事板或UIViewController中的视图出现,这是不会起作用的。您需要在故事板中连接一个推分段(这将需要一个UINavigationController),或者以模态方式呈现新控制器,这也可以在故事板中完成。如果这个ViewController有一个笔尖,你可以这样做:
CustomViewController *controller = [[CustomViewController alloc] initWithNibName:@"CustomViewController.xib" bundle:[NSBundle mainBundle]];
[self presentViewController:controller animated:YES completion:NULL]; https://stackoverflow.com/questions/11710463
复制相似问题