当前位置: 首页 > 知识库问答 >
问题:

使用objective-c以编程方式设置子视图的视图控制器

龙新荣
2023-03-14

我有一个UIViewController(MainViewController),它管理一个包含两个子视图的视图,我使用脚本创建了这两个子视图。现在我希望这两个子视图由它们自己的模型控制器管理,因此应用程序完成的大部分工作都是分布式的,而不是集中在这一个控制器上。

我尝试在视图控制器上设置视图,但它不起作用(至少其他控制器上的viewDidLoad没有被调用,尽管视图显示)。在MainViewControllerviewDidLoad中,我有以下内容:

MainNavigationViewController* navigationViewController = [[MainNavigationViewController alloc] init];
MainContentViewController* contentViewController = [[MainContentViewController alloc] init];

navigationViewController.view = self.navigationView;
contentViewController.view = self.contentView;

我该怎么做?还有,这是个好主意吗?

共有3个答案

燕朝明
2023-03-14

我想你是在找类似

[navigationViewController pushViewController:contentViewController animated:YES];

NavigationViewController有一组视图控制器。您必须将视图控制器推入导航视图堆栈。

郭琦
2023-03-14

viewDidLoad肯定不会被调用,因为视图已经加载。如果没有调用其他方法(ViewWillExample等),则可以将调用转发给其他ViewController。

我会选择另一种方式,即将已经具有viewController的视图添加到MainViewController。我不完全确定这一点,但我认为ViewController方法将以这种方式调用。

其工作应如下:

为包含导航视图的MainNavigationViewController创建情节提要。为包含内容视图的MainContentViewController创建另一个。从MainViewController的情节提要中删除所有子视图,但将navigationView和contentView保留为空占位符。为mainViewController中的ViewController创建两个属性以存储其引用。在主ViewController的viewDidLoad中,通过创建其他两个ViewController

self.mainNavigationController = [[UIStoryboard storyboardWithName:@"MainNavigationControllersStoryboardName" bundle:nil] instantiateViewControllerWithIdentifier:@"MainNavigationControllerIdentifier"]; 
self.mainContentController = [[UIStoryboard storyboardWithName:@"MainContentViewControllersStoryboardName" bundle:nil] instantiateViewControllerWithIdentifier:@"MainContentViewControllerIdentifier"]; 

并将其视图添加到占位符中:

[self.navigationView addSubview: mainNavigationController.view];
[self.contentView addSubview: mainContentController.view];

我希望您正在使用自动布局,以便视图将调整其大小,否则您将不得不在viewWillLayoutSubview中设置其框架,以匹配父视图的框架

张和豫
2023-03-14

在故事板中,您可以将这些子视图放置在容器视图控件中,该控件定义了视图控制器的区域,该区域可以包括子视图控制器。然后,您让该子视图控制器管理子视图。

 类似资料:
  • 问题内容: 如何以编程方式为情节提要设置?我想根据不同的启动条件将情节提要板打开到其他视图。 问题答案: 如何 不 使用虚拟初始视图控制器 确保所有初始视图控制器都有一个Storyboard ID。 在情节提要中,取消选中第一个视图控制器中的“是初始视图控制器”属性。 如果您此时运行应用程序,则将阅读: 您会注意到,应用程序委托中的window属性现在为nil。 在应用程序的设置中,转到目标和选项

  • 如何以编程方式设置属性?

  • 问题内容: 已经为此苦苦挣扎了一段时间,似乎永远也找不到直接的答案。 任何帮助表示赞赏! 问题答案: 如果您在导航控制器中: 或者,如果您只想呈现一个新视图:

  • 我见过很多关于如何分别设置ImageView和GridView的高度和宽度的问题。这里,这里,还有这里 但是,我想知道如何设置两者。 这是我的设置。在我的GridView中,我有一个ImageView和一个TextView。我有一些不同宽度和大小的图像,我想调整它们的大小,使其始终是屏幕正方形大小的1/3。下面,我有一段文字描述。 这是我到目前为止的代码。。。 gallerygridview.xm

  • 如何在java中向文本视图添加样式?我试图在我的价值观/风格下添加一个。xml,而不是单独添加每个属性。

  • 我找到了一些关于这个问题的帖子,但是没有一个能解决我的问题。 说像我已经... ViewControlllerA ViewControlllerB 我试图将ViewControlllerB添加为ViewControlllerA中的子视图,但是,它抛出了一个错误,如""。 下面是代码。。。 视图控制器 ViewControllerB只是一个带有标签的简单屏幕。 视图控制器B 编辑