2010-09-21 58 views
2

我是想在我使用一個稍微不同的方式來使用IB,我無法得到它的工作延長了正常的方法,我使用,具有IB打交道時。的UIView建立在Interface Builder連接到我的自定義的UIViewController

我不想製作一個新的UIViewController,而是爲我和所有由Xcode鏈接的視圖生成視圖XIB,我只想構建一個小的(320x40像素)視圖XIB並將其鏈接到我現有的ViewController。

我通過在Xcode中的新文件開始時,選擇「查看廈門國際銀行」。 然後我打開IB並添加一些標籤等視圖,我設置「文件所有者」是我現有的ViewController。 在我現有的ViewController中,我爲標籤等設置了IBOutlets。我放入了我的視圖。 我回到IB並將UILabels連接到「文件所有者」中的我的網點。

現在我認爲我有到廈門國際銀行內標籤的參考,在我的viewController。 這實際上並不是我想要的方法,我發現我的viewController無需在視圖中引用標籤。

如何我通常在代碼:

我的視圖控制器控制一堆UIViews的完全由代碼和誰實例化它們是:

UIView *customView = [[CustomView alloc] initWithFrame:aFrame]; 
[customView setTag:MY_CUSTOM_VIEW]; 
[customView setDelegate:self]; 
[self.view addSubView:customView]; 
[customView release]; 

此後,我將訪問標籤,按鈕從我的控制器使用[(UILabel*)[[self.view viewWithTag:MY_CUSTOM_VIEW] myLabel] [email protected]"Hello, World"]; 等有我的UIViewController需要實現什麼都方法customView協議。

如何獲得該功能與IB

我應該首先建立擴展UIView類,有它握住我的所有IBOutlets,設置MyCustomClass作爲文件的所有者,然後實例化如上所示的MyCustomView類? 是否確定有對IB圖的圖充當的viewController和我將如何接力行動,以我的「真實」的viewController?

我想實現的是處理在我的UIViewControllers代碼中實例化和佈局多個UIViews,但是可以自由地在IB中設計一些這些UIViews。

我能找到的所有信息都是關於標準的「用視圖的XIB構建UIViewController」或「如何構建IB組件的庫」。

我希望這是有道理的,並感謝給予任何幫助:)

回答

1

您可以創建在Interface Builder想要的任何視圖結構,然後使用UINib類實例化。一旦你創建了一個UINib對象,它會從nib中加載內容並保留它們。然後,無論何時您發送消息instantiateWithOwner:options:,它都會實例化xib中包含的對象,並返回具有頂級視圖的數組。然後,您可以將這些視圖添加到視圖層次結構中,並像處理程序創建的任何其他視圖一樣處理它們。

如果保持UINib對象(如例如屬性),你可以一次又一次地實例化內容,讓您的XIB像一個模板使用。

更新:對於iOS 4之前的解決方法,請參閱my recent question and answer

+0

謝謝Toastor,這聽起來像我需要的東西。我在文檔中注意到它是一個iOS 4.0的新增功能,它會在運行3.x的設備上不起作用嗎?如果要包裝NIB視圖,文檔中也沒有提到如何構建NIB(處理插座等)。你能否指出我在哪裏可以看到這個功能是如何實現的。再次感謝。 – RickiG 2010-09-21 10:32:43

+0

對不起,我不知道任何資源,我自己想出了一些東西。在你的筆尖內,你可以像往常一樣指定文件的所有者並進行適當的連接。儘管如此,它們對於所有實例都是相同的,因此您需要在實例化之後立即在新視圖上設置標籤,以便以後能夠區分它們。至於iOS 4之前的更換 - 我有完全相同的問題。我會立即更新我的答案並提供問題和答案的鏈接。 – Toastor 2010-09-21 10:48:14

+0

你這樣做就像你會爲任何筆尖。假設你有一個視圖控制器並將該筆尖的內容添加到VC的視圖中。 VC有一個方法' - (IBAction)buttonPressed:(id)sender;'。如果在你的筆尖中添加一個按鈕並將文件所有者設置爲你的VC子類,那麼可以照常將操作連接到按鈕。當點擊該按鈕的任何實例時,該操作方法將被調用,但是,這就是爲什麼如果您只是一次實例化該筆尖,您需要標籤。否則,你不知道哪個按鈕被點擊。 – Toastor 2010-09-21 12:09:07

相關問題