iOS:加载另一个视图控制器的 uiview

Posted

技术标签:

【中文标题】iOS:加载另一个视图控制器的 uiview【英文标题】:iOS : Load uiview of another view controller 【发布时间】:2014-01-27 14:18:29 【问题描述】:

我有一个UIViewcontroller,我在上面展示了包含注册表单的 UIview。 现在我需要在另一个 UIViewcontroller 上使用相同的注册表单,而无需为第二个 UIViewcontroller 重新创建相同的注册表单。

我正在使用 UInavigationcontroller。

有什么方法可以实现吗?自从过去几个小时以来,我一直卡住并尝试了所有方法。

【问题讨论】:

View Controller Containment 选项 1:将通用功能放在不同的类中,并从两个视图控制器中继承。选项 2:将通用功能放在帮助类中并在 2 个视图控制器中使用该类(如果您将它们定义为静态)或对象。如果你想重用 GUI 设计,你会遇到一个小问题(我仍然没有弄清楚如何使用 Storyboard 正确地做到这一点)。 @Abizern :仅当视图是主视图但在我的情况下要添加的视图嵌套在内部时才有效。 不,这就是收容的意义所在。您将控制器添加为主视图控制器的子视图,然后将其视图添加为子视图。 @alinoz 您使用“容器视图”在情节提要中创建关联的视图控制器 - 并且还负责将此关联的 VC 添加为子 VC。我刚刚创建的一个非常简单的例子dl.dropboxusercontent.com/u/585261/Containers.zip 【参考方案1】:

第一种方法和我更喜欢的方法是将registration form 创建为单独的UIView 类。

然后你可以在各种view controllers 中使用它作为subview

第二种方法,你可以创建一个parent class 并从这个parent class 继承两个类。这个父类将包含所有常用功能。(如@alinoz 所述)。

【讨论】:

但是单独的 UIView 类将只有功能而不是 UI 部分。所以我将不得不重新创建 UI 部分【参考方案2】:

您可以在另一个视图控制器中添加viewController。创建registretionViewController 的实例并将其视图添加到当前viewcontroller vew 中。 [self.view addSubview:regViewController.view]。如果你想推送它,你可以简单地创建它的实例并推送导航堆栈。

【讨论】:

UIViewController 包含是一个更好的主意,我什至不确定没有它你的代码是否能干净地编译。 如果您需要与任何其他视图控制器相同的视图,那么我认为这是创建实例并将视图添加为子视图的好选择。上面的代码不是完整的,而是解决问题的一种方法 为什么要投反对票,添加 viewcontroller 的视图作为子视图是视图包含。【参考方案3】:

让您的注册表单视图的类为 RegisterFormView。

appDelegate中创建RegisterFormView的类公共属性。

@property (nonatomic,strong) RegisterFormView *formView;

当你第一次在 viewController A 中创建表单视图时,也要在 appDelegate 中分配相同的视图。

[UIApplication sharedApplication].delegate.formView = registrationFormViewInstance;

在另一个视图控制器(B)中,您想使用相同的 formView,

if([UIApplication sharedApplication].delegate.formView != nil)
   //use the form view

【讨论】:

应用程序委托不是可以用来存储任意引用的方便的单例。 @Abizern 什么? application Delegate 只是一个。而且它有点像单例,为什么他不能使用它,除非他指定他不想接触 appDelegate。请解释..? 我应该更清楚一点 - 应用程序委托并不意味着用作一些方便的单例,用于存储任意引用。

以上是关于iOS:加载另一个视图控制器的 uiview的主要内容,如果未能解决你的问题,请参考以下文章

视图控制器完成加载时 UIView 背景颜色发生变化

iOs - 将uiview插入代码中的另一个视图,保持约束

从 UIView ios 推送视图控制器

从 iOS 中的 UIView 子视图重新加载时 UITableView 未重新加载

如何在加载了 nib 文件的 UIView 中调整子视图的大小

如何通过iOS Objective C中的appDelegate从另一个视图控制器重新加载表视图