2011-06-20 68 views
3

我還是iOS的初學者,所以最近我一直在做很多教程。使用大量IBOutlets是不是很好?

比方說,我正在製作一個應用程序,如計算器,讓我們說24個按鈕。我已經看過示例代碼,其中按鈕的標籤被用來確定它是什麼按鈕,但看起來真的很糟糕,特別是在嘗試翻譯應用程序時。

因此,咬一顆子彈併爲每個按鈕代替一個IBOutlet會更好嗎?爲什麼或者爲什麼不?

如果不是這樣,那麼在停留在MVC範例中的同時,最優雅的方法是什麼?


好吧,我只是在我的代碼回頭看,現在我的感覺更像是一個小白比以前...我真的在談論IBActions,與其說IBOutlets ......我應該有一大堆的IBActions爲不同的按鈕?這裏是它現在在viewController.h文件中的樣子:

- (IBAction)digitPressed:(UIButton *)sender; 
- (IBAction)operationPressed:(UIButton *)sender; 
- (IBAction)dotPressed:(UIButton *)sender; 
- (IBAction)button_mClear_Pressed:(UIButton *) sender; 
- (IBAction)button_mPlus_Pressed:(UIButton *) sender; 
- (IBAction)button_mMinus_Pressed:(UIButton *) sender; 
- (IBAction)button_mRecall_Pressed:(UIButton *) sender; 
- (IBAction)button_AC_Pressed:(UIButton *) sender; 
- (IBAction)button_PlusMinus_Pressed:(UIButton *) sender; 

爲什麼這隻會讓我覺得重複和不雅?

回答

2

如果您在Interface Builder中使用IBOutlets並將其連接起來,則Xcode 4比起編程決定更適合品味。這樣做或不這樣做不一定會影響mvc範式。

如果您在視圖控制器中保留了24個IBOutlet並從一個筆尖加載按鈕,這可能是您的選擇,因爲它可能更容易在界面中彈出它們,或者使數組充滿按鈕,並將它們添加到以編程方式查看您的視圖,並使用正確的操作進行設置。

編輯
您也可以在不同的視圖 - 控制不同的筆尖的按鈕 - 可以說爲數字鍵盤,簡單的命令和上級命令和功能。每個視圖控制器都有一個特定協議的委託,這些委託都可以通過'BrainController'來實現。這個設置對於一個簡單的計算器來說可能有點矯枉過正,但是可以讓你使用筆尖,而不會在IBOutlets中過度擁擠的viewcontoller 。您可以在其他項目中重複使用它,例如在帶有遠程控制界面的應用程序中的數字鍵盤。

+0

啊我喜歡BrainController的想法......那麼所有視圖控制器的其餘部分都是這個視圖控制器的子類嗎?所以例如在蘋果的計算器上,有兩個視圖... 22個按鈕的縱向視圖,以及46個按鈕的橫向視圖,更寬的顯示,更高的精度,deg/rad顯示...我究竟如何設置nib和視圖控制器,特別是重用不太先進的視圖上的原始按鈕? –

1

如果您使用XIB和許多對象,那麼是的。如果你打算讓對象做一些特殊的事情,比如稍後在代碼中調用一些方法時禁用按鈕,那麼就勾選一個IBOutlet。如果只將按鈕連接到IBAction,那麼不需要,只需將任何按鈕(沒有IBOutlet)連接到IBAction,這將節省您連接一堆對象的時間。

3

通常情況下,你會有類似的按鈕都觸發相同的動作,這個想法是相似的按鈕動作應該在它們之間有一些共同的代碼。然後,您使用tag屬性來確定哪個按鈕被點擊。例如,數字按鈕觸發特定動作,操作員按鈕觸發另一個動作,等等。

- (void)didClickOperatorButton:(id)button 
{ 
    switch ([button tag]) 
    { 
     case kAdditionOperation: 
      // Do the addition operation ... 
      // etc.. 

您可以在Interface Builder中的任何控件上設置tag屬性。

+0

這聽起來很合理。這在某種程度上是我在做的。我會研究標籤的事情......這很有道理。 –

相關問題