addSubview
如果您的意图是在视图之间转换,您真的不应该使用。如果这样做,您将不会收到旋转事件,因为您允许视图控制器层次结构与视图层次结构不同步。您应该addSubview
仅用于向视图添加真正的子视图(例如 a UILabel
、 a UIImageView
、 aUIButton
等,或者,如果执行正确的视图控制器包含等,则为子视图)。视图之间转换的使用addSubview
代表了视图控制器和视图之间的基本混淆。
正确管理视图的关键是确保视图控制器层次结构与视图层次结构同步。最简单的方法是在视图控制器之间进行转换,让它们处理视图的呈现。因此,如果您使用的是 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
and didMoveToParentViewController
),但是如果您正在视图之间进行基本转换,则控制器的正确初始化和随后的调用presentViewController
或者pushViewController
应该为你做。
更新:
顺便说一句,如果您使用的是故事板(我不认为您是,但以防万一),而不是instantiateViewControllerWithIdentifier
,我实际上可能建议您在故事板上定义一个 segue,在 Interface Builder 中为其提供一个标识符字符串,然后使用以下代码过渡到下一个场景:
[self performSegueWithIdentifier:@"yourIdentifier" sender:self];
如果你这样做,它会为你实例化你的控制器,你的整个应用程序的流程将在故事板中准确地表示。