iphone - View Controller 添加 subview

标签 iphone objective-c ios uiviewcontroller addsubview

我快要疯了:

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

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

当进程启动时,会调用 golOlur 的 viewDidLoadviewDidAppear 方法,但不会呈现 View 。

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

最佳答案

如果您的意图是在 View 之间转换,您真的不应该使用 addSubview。如果这样做,您将不会收到旋转事件,因为您允许 View Controller 层次结构与 View 层次结构不同步。您应该只使用 addSubview 添加真正的 subview (例如 UILabelUIImageViewUIButton 等., 或者, 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 遏制,请告诉我们,因为这略有不同(需要调用 addChildViewControllerdidMoveToParentViewController),但如果您正在执行 View 之间的基本转换、 Controller 的正确初始化以及随后对 presentViewControllerpushViewController 的调用应该为您完成。

更新:

顺便提一句,如果您正在使用 Storyboard(我不认为您在使用,但以防万一),而不是 instantiateViewControllerWithIdentifier,我可能实际上建议您在 Storyboard,在 Interface Builder 中为其提供标识符字符串,然后使用以下代码转换到下一个场景:

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

如果您这样做,它会负责为您实例化您的 Controller ,并且您的整个应用程序的流程将准确地显示在 Storyboard 中。

关于iphone - View Controller 添加 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11710463/

相关文章:

ios - 使用mac中的用户名进行身份验证

ios - 如何从一个文件控制所有导航栏?

objective-c - macOS kexts 能否将代码注入(inject)特定进程(就像 mach_inject 那样)?

ios - 为什么 UIScrollView 在显示键盘时不滚动?

iphone - 访问 Controller 中 Interface Builder 中创建的 UI 元素?

iphone - 如何将 NSinteger 转换为字符串

objective-c - 这是对typedef枚举的滥用还是误用(与具有静态内容的UITableView一起使用)

ios - 如何在 YouTube Search API v3 中获取内容详细信息? ( swift )

ios - 如何判断iOS Today Widget是否正在后台更新?

iphone - 在保持原始字符串大小写的同时替换 NSString 中出现的字符串