我快要疯了:
GolOlurActionViewController *golOlur = [[GolOlurActionViewController alloc] init];
[self.view addSubview:golOlur.view];
我有上面的代码,我在 ViewController
内的 IBACtion
中调用它。 GolOlurActionViewController
是一个ViewController
,你们都可以猜到。
当进程启动时,会调用 golOlur 的 viewDidLoad
和 viewDidAppear
方法,但不会呈现 View 。
我已经尝试了我所知道的一切,但无法解决这个问题。
最佳答案
如果您的意图是在 View 之间转换,您真的不应该使用 addSubview
。如果这样做,您将不会收到旋转事件,因为您允许 View Controller 层次结构与 View 层次结构不同步。您应该只使用 addSubview
添加真正的 subview (例如 UILabel
、UIImageView
、UIButton
等., 或者, subview ,如果对 View 进行适当的 View Controller 包含等)。使用 addSubview
在 View 之间进行转换代表了 View Controller 和 View 之间的根本混淆。
正确管理 View 的关键是确保 View Controller 层次结构与 View 层次结构同步。最简单的方法是在 View Controller 之间进行转换,让它们负责 View 的呈现。因此,如果您使用的是 NIB,它通常是:
GolOlurActionViewController *golOlur = [[GolOlurActionViewController alloc] initWithNibName:nil bundle:nil];
[self presentViewController:golOlur animated:YES completion:nil];
或者,带有导航 Controller 的 NIB:
GolOlurActionViewController *golOlur = [[GolOlurActionViewController alloc] initWithNibName:nil bundle:nil];
[self.navigationController pushViewController:golOlur animated:YES];
或者,如果您正在使用 Storyboard(话又说回来,如果您正在使用 Storyboard,您可能会使用 segues 并且不需要任何这些,但只是为了完整性):
GolOlurActionViewController *golOlur = [self.storyboard instantiateViewControllerWithIdentifier:@"GolOlurActionView"];
[self presentViewController:golOlur animated:YES completion:nil];
如果您的 Storyboard使用导航 Controller :
GolOlurActionViewController *golOlur = [self.storyboard instantiateViewControllerWithIdentifier:@"GolOlurActionView"];
[self.navigationController pushViewController:pushViewController:golOlur animated:YES];
在不太可能发生的情况下,您尝试进行 Controller 遏制,请告诉我们,因为这略有不同(需要调用 addChildViewController
和 didMoveToParentViewController
),但如果您正在执行 View 之间的基本转换、 Controller 的正确初始化以及随后对 presentViewController
或 pushViewController
的调用应该为您完成。
更新:
顺便提一句,如果您正在使用 Storyboard(我不认为您在使用,但以防万一),而不是 instantiateViewControllerWithIdentifier
,我可能实际上建议您在 Storyboard,在 Interface Builder 中为其提供标识符字符串,然后使用以下代码转换到下一个场景:
[self performSegueWithIdentifier:@"yourIdentifier" sender:self];
如果您这样做,它会负责为您实例化您的 Controller ,并且您的整个应用程序的流程将准确地显示在 Storyboard 中。
关于iphone - View Controller 添加 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11710463/