2013-01-03 48 views
12

我試圖使用故事板創建和設計UIView,但以編程方式將其包含在UIActionSheet中。這基本上是爲了避免使用像素的CoreGraphics定位功能在故事板中創建獨立視圖以編程方式使用

在舊的xcode中,我記得可以在沒有任何控制器的情況下將UIView拖到nib上。

的觀點顯然必須連接到類,所以它有一個IBOutlet,但不能被添加到self.view

一件事,讓我覺得這應該是可能的是,如果你拖動的UIView到故事板它會彈出到位,像這樣的控制器黑條:

Snapped in UIView

但它不是屏幕本身上顯示。這個功能的用途是什麼?我能以某種方式打開這個視圖並設計一下嗎?

+0

首選此鏈接http://stackoverflow.com/questions/9498010/custom-views-with-storyboard – python

回答

14

只需創建一個新的.xib文件。

  1. 右鍵單擊導航區中的某個地方,然後選擇「新建文件...」。
  2. 從右側列表中選擇「用戶界面」並選擇「查看」。
  3. 點擊「下一步」,「下一步」,爲您的新視圖命名,並點擊「創建」。
  4. 新的.xib填充將被添加到您的項目中。
  5. 雙擊新的.xib文件,並在Interface Builder(非Storyboard)中打開。
  6. 根據自己的喜好編輯/設計您的視圖。

然後你在Interface Builder中新視圖(的.xib)之後,它創造的UIView的一個新的子類的簡單事情(前。MyView的),開關類新觀點(的.xib )添加到MyView,在您的控制器中創建MyView實例,並將其作爲子視圖添加到其他視圖。


*並回答你有關黑色小酒吧底部的問題,這就是所謂的「碼頭」,這是你的場景的頂層文件只是一個小型的表示。該碼頭便於快速拖放/拖放圖標並進行連接。請參閱蘋果的故事板說明here。 Ray Wenderlich在故事板here上有一個易於使用的教​​程。

+0

,我已經創建並沒有兌現,我給它的界限的廈門國際銀行視圖。它只是顯示爲填充整個屏幕「frame =(0 0; 320 302);'。你知道我是否需要對xib做一些特殊的事情來設置一些「固定」邊界? –

+0

@YarekT是的,在'Simulated Metrics'下將'Size'下拉菜單設置爲'Freeform'。您可以在Xcode Utility區域的檢查器窗格中的第4個選項卡(標尺圖標左側)中找到它。 – sean

+0

我已經設置了。設置原點並沒有改變任何事情。視圖*的大小正確,但其框架和邊界被設置爲全屏大小:http://i.imgur.com/IGQeE.png(頂部導航欄不是xib UIView的一部分) –

6

在故事板上的UIViewController之外不能有UIView。我猜這是因爲故事板不知道如何識別或實例化當前的API。這是我自己用過的東西。解決方法是使用XIB作爲一個UIView並以編程方式加載它(就像以前那樣)。我發現對大多數項目使用故事板,並將多個視圖控制器中的可重複視圖的XIB結合在一起工作。

下面是我用來加載XIB作爲自定義對象的一部分與對象被初始化的一些代碼。

- (id)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
     [[[NSBundle mainBundle] loadNibNamed:@"BannerView" owner:self options:nil] objectAtIndex:0]; 
     [self addSubview:self.view]; 
     self.frame = self.view.frame; 
    } 
    return self; 
} 

至於將視圖拖放到故事板上的黑色欄中。這些意見仍然是UIViewController的一部分,但它們不是頂級視圖的「子視圖」。我認爲文檔大綱很好地顯示了層次結構。

以下視圖在我的主視圖層次結構之外有2.1.1視圖,2.1.2視圖等,因爲它們不是我的主視圖的子視圖。結果是,它們不會默認顯示。我的設置是IBOutlets,我有條件地使用標準的addSubview:removeFromSuperview將它們從我的主視圖層次結構中添加/刪除。

IB Document Outline example

+0

所以有可能創建一個完全設計的子視圖,按鈕,標籤和whatnot,然後將其拖動到欄並使其成爲頂級視圖,以編程方式切換?編輯:答案似乎是沒有,表視圖控制器不喜歡沒有'UITableView' = /我認爲storyboard UI仍然需要一點工作 –

+0

我還沒有嘗試過,但它可能會導致更多的問題複雜的視圖控制器我傾向於將它用於通常對用戶不可見的覆蓋圖。它從我的故事板中消除了隱藏對象的混亂,並且可能通過將視圖保持在主視圖之外而加速視圖(不顯眼),除非需要。 – DBD

+0

@Eric由於Storyboard不允許您在沒有UIViewController的情況下創建UIView。我想,如果它允許我將視圖拖入碼頭而不是子視圖,那麼我可以通過編程方式將它連接到UIActionSheet。正如您正確地指出解決方案是用視圖創建一個單獨的xib –

相關問題