故事板处理继承视图控制器

22

我是Storyboard的新手。以前我习惯使用代码来创建视图。我有一个问题。

我创建了一个视图控制器。

@interface FunctionViewController : UIViewController

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

  1. 一个全屏按钮(透明度:0.5)
  2. 一个类似弹出式视图的区域(非全屏)

然后,我创建了另一个Viewcontroller。

@interface PlayFunctionViewController : FunctionViewController

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

我想通过使用故事板来重新创建这些内容。

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


如果您正在使用界面构建器进行布局,则必须完全布置每个单独的视图控制器,因为您必须链接每个视图控制器的IBOutlet。如果您想要在视图控制器及其所有子类中显示元素,请在“viewDidLoad”方法中以编程方式创建它们。 - Greg
PartiallyFinite - 不完全有限,他可以使用标签 - [self viewWithTag:100] - Quver
2个回答

13
在故事板中,你无法在子类中继承父类的布局。也就是说,如果你在故事板中为视图控制器的元素进行了可视化布局并将其连接到代码中,那么该视图控制器的子类甚至相同类的其他实例都需要单独进行布局,并且不会自动填充或更新。
换句话说,在故事板中,你必须手动地为每个添加到故事板中的实例和子类布局和连接所有的接口元素。这样做可以让你灵活地在应用程序中重复使用多个相同类的实例并以不同的方式进行布局,但它不会给你继承布局的能力。
如果你想要在子类中继承布局,请在父类的viewDidLoad中以编程方式进行布局,然后所有的子类都将拥有这些接口元素,即使你在故事板中设计和布局它们(它们在故事板中不可见,但当你构建和运行你的应用程序时,它们将出现)。
基本上,如果你想在一个类及其所有子类中具有相同的接口元素,请以编程方式创建它们,它们将存在于所有实例和子类实例中,即使你在故事板中创建和设计实例本身。
你可以混合代码和故事板,因此你可以在故事板中创建一些元素,但其他需要在所有实例和子类中存在的元素则需以编程方式创建。

这个能通过nibs的某种方式来完成吗?我已经使用自动布局设置了我的视图,并添加了所有的约束。如果能在所有子类中继承这些设置,那就太好了。 - abc123
很遗憾,不行。我自己也遇到过这种情况,最后要么复制粘贴视图控制器,要么在代码中添加额外的部分。 - Greg
我不同意,如果你从nib文件初始化你的视图控制器,它可以被继承,包括自动布局约束。我已经在iOS 7和8上完成了原型。 - Wingzero
1
这样做可以让您灵活地在应用程序中重复使用同一类的多个实例,并以不同的方式布局它们,但我认为这只是一个愚蠢的限制,而不是任何形式的“灵活性”。 - nenchev

2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接