2014-01-12 24 views
2

我正在使用故事板,並試圖重用視圖的不同ViewControllers。爲此,我創建了幾乎隨處可見的自定義.xib(MyCustomView.xib)和類(MyCustomView)。使用自定義視圖與故事板而不添加兩次

在我的故事板中,我將自定義視圖設置爲MyCustomView類型。

MyCustomView.xib中,將第一響應者設置爲MyCustomView

MyCustomView.m,添加以下方法:

-(id)initWithCoder:(NSCoder *)aDecoder{ 
    if ((self = [super initWithCoder:aDecoder])){ 
     UIView *myCustomView = [[[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil] objectAtIndex:0]; 
     [self addSubview: myCustomView]; 
    } 
    return self; 
} 

問題是,[self addSubview: myCustomView]增加了一個新MyCustomView現有MyCustomView,所以視圖添加兩次。

我該如何擺脫兩者之一?

編輯

我的問題是真不明白,所以我想一些屏幕上限會有所幫助。

這是我的故事板與自定義視圖。自定義類別設置爲MyCustomViewStoryboard with MyCustomView

(我還添加了一個灰色的背景,僅用於測試目的的標籤)現在

,在MyCustomView.xib,我設置文件的所有者是MyCustomView類: MyCustomView.xib

並添加網點標題標籤和imageView: MyCustomView.xib

用上面寫的initWithCoder方法,這工作正常,除了當我調試我可以看到這個: MyCustomView.m 所以selfMyCustomView類型當然,如在故事板選擇,但它包含2子視圖:

  • 首先是從我的故事板
  • 第二測試標記是從MyCustomView.xib,含有本身的視圖標籤和圖像視圖。 這就是我想擺脫的這種看法。
+0

另一種方法是在故事板中完成所有操作 - 在一個控制器中創建自定義視圖,然後將其複製並粘貼到其他控制器中(刪除他們的默認視圖,粘貼之前)。 – rdelmar

+0

這可能會更容易,但是每次我在控制器中修改視圖時,都必須相互修改它,這就是爲什麼我需要它在.xib文件中。 – Damien

回答

0

什麼是self

這裏,它是你剛剛實例化的MyCustomView。因此,您要將新的UIView(不是MyCustomView)添加到由initWithCoder方法創建的新MyCustomView實例中。

initWithCoder是加載故事板視圖時調用的方法。

如果你想實例化一個新MyCustomView 在MyCustomViewController你必須調用

MyCustomView *newInstance = [[MyCustomView alloc] init]; 
[self addSubview:newInstance]; 

自我是MyCustomViewController的情況下在你的故事板。


編輯

好,我更好地瞭解你的問題。 如果你想加載MyCustomView nib文件,你不需要爲它創建一個類(除非你有特定的變量要訪問它) 只需要做你在這裏做的事情,但在視圖中控制器,這將是自:)

你可能想看看:How to load a UIView using a nib file created with Interface Builder


EDIT 2

好吧,我想我明白了:

  • 刪除故事板中的MyCustomView。
  • 創建一個MyView類或您附加到Storyboard中名爲「View」的視圖的任何內容。
  • 在你的類的init方法中,你實例化你的MyCustomView筆尖
  • 將結果UIView添加到視圖堆棧中,就像你做的那樣。

將MyView的(故事板存在),MyCustomView不會出現在故事​​板,但在MyView.h

的init方法編程方式創建你將不得不以編程方式添加約束。這是一個有用的帖子:Adding View Programatically With Auto Layout Gives 'NSGenericException', reason: 'Unable to install constraint on view

+0

是的,我很抱歉,我正在向MyCustomView添加一個新的UIView。但如何擺脫這個特定的UIView?導致在我的.xib文件中,它代表MyCustomView ... 謝謝 – Damien

+0

簡單化:-)如果您在XCode中開始一個新項目,則默認視圖將在Storyboard中爲UIView類型。如果你希望它是MyCustomView類型的,你只需要在右側面板中輸入它(第三個選項卡 - >自定義類)。 **不要在自定義視圖類**的init中實例化新視圖。如果你想在其他地方實例化一個新的視圖,就像我在這個答案中寫的一樣。 –

+0

我編輯我的問題與屏幕帽,因爲我害怕它不是很清楚。我確實有特定的變量,所以我需要一個類。此外,我喜歡我的方法,因爲我不必在視圖控制器中添加任何代碼(它只能由故事板和我的窗口小部件視圖處理)。 – Damien

相關問題