StoryBoard 处理继承的视图控制器

Posted

技术标签:

【中文标题】StoryBoard 处理继承的视图控制器【英文标题】:StoryBoard handling inherited view controller 【发布时间】:2012-12-21 04:55:50 【问题描述】:

我是故事板的新手。我曾经使用代码制作我的视图。我有一个问题。

我创建了一个视图控制器

@interface FunctionViewController : UIViewController

我已经使用我的代码添加了

    全屏按钮(alpha:0.5) 中间的弹出式视图(非全屏)

然后我创建了另一个 Viewcontroller

@interface PlayFunctionViewController : FunctionViewController

并在弹出式视图上添加一些视图

我想用故事板重新创建这些东西。

如何使用界面构建器和故事板构建这些,以便 我不需要在 FunctionViewController 的每个子类中布局全屏按钮和弹出式视图?

【问题讨论】:

它基于您接受的答案数量... 如果您在界面构建器中进行布局,则必须完全布局每个单独的视图控制器,因为您必须为每个视图控制器链接IBOutlets。如果你想让元素出现在视图控制器及其所有子类中,请在 viewDidLoad 方法中以编程方式创建它们。 PartiallyFinite - 不完全是,他可以使用 Tag - [self viewWithTag:100] 【参考方案1】:

您不能在情节提要的子类中继承超类的布局,即,如果您在情节提要的视图控制器中直观地布置元素并将它们连接到代码、该视图控制器的子类甚至其他实例同一类的,必须单独布局,不会自动填充或更新。

换句话说,在情节提要中,您必须手动布置和连接您添加到情节提要的每个单独实例和子类中的所有界面元素。这为您提供了灵活性,您可以在整个应用程序中重用同一类的多个实例并以不同的方式布局它们,但它不会让您能够继承布局。

如果您想在子类中继承布局,请以编程方式在超类的viewDidLoad 中进行布局,然后您的所有子类都将具有这些界面元素,即使您在情节提要中设计和布局它们(它们在情节提要中不可见,但会在您构建和运行应用程序时出现)。


基本上,如果您希望在一个类及其所有子类中具有相同的界面元素,请以编程方式创建它们,它们将存在于所有实例和子类实例中,即使您在您的故事板。

您可以混合使用代码和情节提要,这样您就可以在情节提要中创建一些元素,而另一些则需要在代码中出现在所有实例和子类中。

【讨论】:

这可以通过 nibs 以某种方式完成吗?我已经使用带有所有约束的自动布局设置了我的视图。在所有子类中继承它肯定会很好。 @sguptaet 不幸的是没有。我自己也遇到过很多次,最终要么复制并粘贴视图控制器,要么在代码中添加额外的位。 我不同意,如果你从 nib 文件初始化你的视图控制器,它可以被继承,包括自动布局约束。我已经在 ios 7 和 8 上完成了原型。 “这为您提供了灵活性,您可以在整个应用程序中重用同一类的多个实例并以不同的方式布局它们”无论如何我都可以这样做,这对我来说似乎是一个愚蠢的约束,而不是任何形式的“灵活性”。【参考方案2】:

我遇到了类似的问题,虽然这很耗时,但创建一个委托并在多个视图控制器中重用它是一个更好的解决方案。虽然这超出了“继承”的全部意义。

【讨论】:

以上是关于StoryBoard 处理继承的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

在 Xcode 中,如何重命名 Storyboard 中的约束?

如何将 ViewController.swift 连接到 Storyboard 中的 ViewController?

获取Storyboard中的视图控制器

Storyboard 中新视图控制器的类

通过StoryBoard加载视图控制器问题

如何从多个 Storyboard 源视图控制器中呈现给定的视图控制器?