2012-12-21 145 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

我遇到了一個類似的問題,雖然這很耗時,但是創建委託並在多個視圖控制器中重用它是一個更好的解決方案。儘管這打敗了「繼承」的整個觀點。