2012-12-21 116 views
17

我是故事板新手。我曾经使用代码来制作我的视图。我有个问题。StoryBoard处理继承视图控制器

我创建的视图控制器

@interface FunctionViewController : UIViewController 

我有使用我的代码来添加

  1. 全屏按钮(阿尔法:0.5)在中间
  2. 弹出状视图(不全屏)

然后我创建了另一个Viewcontroller

@interface PlayFunctionViewController : FunctionViewController 

,并添加弹出式视图

我想用故事板重新创建这些东西的一些看法。

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

+0

它基于您接受的答案数量...... –

+0

如果您在界面构建器中进行布局,则必须完全布局每个视图控制器,因为您必须链接每个视图控制器的IBOutlet。如果您想要在视图控制器及其所有子类中出现的元素,请在'viewDidLoad'方法中以编程方式创建它们。 – Greg

+0

PartiallyFinite - 不完全是,他可以使用Tag - '[self viewWithTag:100]' – Quver

回答

7

你不能在故事板的子类中继承超类的布局,也就是说,如果你在故事板中的视图控制器中直观地布局元素,并将它们连接到代码,视图控制器的子类,甚至其他相同类别的实例将不得不单独布置,并且不会自动填充或更新。

换句话说,在故事板中,您将不得不手动布局并连接添加到故事板的每个单独实例和子类中的所有界面元素。这给了你灵活性,你可以在应用程序中重复使用同一个类的多个实例,并以不同的方式布置它们,但它不能让你继承布局。

如果您想继承您的布局在子类中,请在您的超类的viewDidLoad中以编程方式执行布局,然后所有子类都将具有这些界面元素,即使您将它们设计并放置在故事板中将不会在故事板中显示,但当您构建并运行应用程序时它们将显示)。


基本上,如果你想有一个是一类相同的界面元素及其所有子类,编程方式创建他们,他们将在所有的实例和子类的实例存在,即使你创建和设计实例本身在你的故事板中。

您可以混合使用代码和故事板,因此您可以在故事板中创建一些元素,但其他元素需要以代码形式存在于所有实例和子类中。

+0

这可以通过笔尖以某种方式完成吗?我使用自动布局设置了所有约束。在所有子类中继承这一点肯定会很好。 – guptron

+0

@sguptaet不幸的不是。我已经多次遇到这个问题,最终复制并粘贴视图控制器或在代码中添加额外的位。 – Greg

+0

我不同意,如果你从nib文件启动你的视图控制器,它可能被继承,包括自动布局约束。我已经完成了iOS 7和8的原型。“ – Wingzero

0

我遇到了一个类似的问题,虽然这很耗时,但是创建委托并在多个视图控制器中重用它是一个更好的解决方案。尽管这打败了“继承”的整个观点。