2009-10-27 79 views
4

我對Cocoa MacOSX非常陌生,但我不禁感到自己在不斷地與Interface Builder戰鬥。爲什麼它像Interface Builder一樣受到我的影響?

我目前的情況是,我正在構建一個將有幾個自定義控件和視圖的應用程序。我開始在Interface Builder中構建應用程序,因爲它最初很容易拖動,並使用正確的顏色和正確的自動調整規則將它們放入正確的位置。然而,現在是開始構建我的自定義控件和視圖的時候了 - 我無法在界面構建器中很好地展示這些控件和視圖,而無需通過構建IBPlugin的工作!我知道的唯一的另一個選項是有一個Interface Builder文檔,其中包含一大堆「自定義視圖」,只是改變了它們的類。突然間似乎毫無意義地對待IB - 尤其是鑑於這些控制和視圖將具有需要設置的顏色等屬性 - 就像IB文檔中已有的其他視圖和控件一樣。所以現在我已經在兩個不連貫的地方設置了可視化屬性,並且似乎對抗了IB的潛在優勢之一,這使得在不挖掘代碼的情況下調整應用的UI相對容易。

我也遇到過幾種控件根據數據或當前選擇更改屬性(如顏色)的情況。所以現在我有在Interface Builder中指定的控件的初始默認顏色,但是我必須在代碼中指定數據驅動的顏色?再次,Interface Builder似乎讓我不得不在它的世界和代碼之間拆分一些演示設置。我想可以用一個複雜的插件來解決這個問題,這個插件可以知道我的數據或者狀態或者其他信息,但是似乎我最終會維護大量的支持代碼,所以Interface Builder的體驗仍然是「正確的」。

我經常看到的其他東西是如何輕鬆地讓IB定義組件之間的綁定。 「你可以在不寫任何代碼的情況下做到這一點!」再說一遍,我可能會錯過一些東西,但根據我的情況,將一個屬性綁定到另一個屬性是單行代碼。在IB中設置幾個屬性比寫單行代碼更好?爲什麼在表示層的規範中放入多少應用邏輯更好?我很喜歡這個Cocoa的東西,但是我覺得我錯過了一些非常重要的關於如何使用Interface Builder的東西,或者它主要是爲了一些簡單的演示應用而設計的,高「哇」因素。

+0

讓我們看看你的用戶界面是什麼樣的。 – 2009-10-27 18:40:03

+1

下面的答案已經涵蓋了我會做的任何一點,所以這只是一個評論,說:你並不孤單!我正在與另一名開發人員一起開發一個大型Cocoa項目的最後階段。我們開始使用IB,但由於我們的用戶界面是高度定製的,我們最終放棄了它。在我看來,IB非常適合學習Cocoa應用程序開發的基礎知識,以及完全符合Apple UI標準的小型項目。大多數定製或複雜的應用程序將更好地在代碼中弄清楚事情。 – 2009-10-28 03:37:53

+1

對於這個問題的一些更好的討論:http://stackoverflow.com/questions/1056079/is-there-a-way-to-programmatically-determine-the-proper-sizes-for-apples-built-i – 2009-10-28 03:40:16

回答

7

我發現Interface Builder非常適合獲取應用程序的通用佈局。這對綁定(在Mac上)等事情也很棒。但是,您無法使用Interface Builder創建Delicious Library。界面越複雜,你需要編寫的代碼就越多。

1

我的第一個iPhone程序,可供出售,以及我的第二個開發中不使用Interface Builder。我喜歡在代碼中包含所有內容,以便我能夠理解正在發生的事情,以便我可以使用版本跟蹤來跟蹤所有更改。

據我所知,這歸結於一個偏好問題。有可可書籍使用兩種風格(IB和沒有IB)。

+0

我在iPhone上也這麼做 - 部分原因是當我開始iPhone開發時,IB幾乎不支持它,所以我從來沒有打擾過它的使用。然而,OSX世界似乎與我所經歷的以IB爲中心,所以它似乎只是「它是如何完成的」。我想我試圖找出這種看法是否真的如此。你指出在這兩方面都有書籍,所以我可以放心的是,如果我只是用IB來管理菜單欄並將其他所有內容留給代碼,那麼我可能不會失去任何重要的東西。 – Sean 2009-10-27 18:36:19

2

Jeff LaMarche(關於iPhone開發成名)寫了an excellent article關於爲什麼IB是一個很好的選擇,即使它在你通過基本教程後看起來不是正確的路線。由於類似的原因,我放棄了IB,但是這篇文章激勵我繼續使用它,它確實最終成爲正確的解決方案,儘管它違背了極端的傾向,不允許太抽象的抽象。

+1

這篇文章似乎主要是一個例子,「使用它,因爲我告訴你它很棒。」實際上只有一個參數(我注意到)是專門列出的,因爲它不會產生代碼,所以調試的代碼更少。這聽起來不錯,但我不知道我完全購買。設置幾個綁定或某些框架矩形需要點擊並在IB中輸入或在Objective-C中輸入幾行。這不像是那些代碼行會在以後突然改變自己,並且錯誤會神奇地出現在那裏。 – Sean 2009-10-27 19:51:22

6

接口構建器可以花費一點時間來適應。但是,如前所述,使用它越多,效果就越好。當然,自定義視圖可以用代碼完成,但IB是一個標準的原因。社區的Mac應用程序保持一定的UI質量標準,遠遠高於其他平臺的UI標準。 IB使得符合這些標準要比在代碼中做所有事情容易得多,沒有可視化參考。

而且您不必在代碼中執行所有操作以使您的UI在版本控制中。我所有的Cocoa項目都在自己的git倉庫中,包含nib/xib文件。

所以給IB一個機會。越多使用它越容易。

+0

使用IB並不難。問題在於,它是否有意義,它看起來似乎導致了(至少對於這個項目而言)以不同方式設置了許多不同的屬性 - 一些在IB中,一些在代碼中,一些數據驅動等等,因爲IB可以不支持我的自定義視圖和事物,無需編寫插件和一堆支持代碼。 :/ – Sean 2009-10-27 19:40:24

相關問題