2010-03-27 47 views
0

我最近一直在做很多Objective-C編程,剛剛回到做更多的iPhone開發。我在其他語言/框架中使用MVC進行了大量編程,但我只想確保在iPhone開發中正確使用MVC。iPhone:正確使用視圖和視圖控制器

我創建了一個新的iPhone Utility應用程序,它創建兩個視圖:MainView和FlipsideView。兩者都有自己的控制器(FlipsideViewController和MainViewController)和XIB文件。

我一直在做的是將IBOutlet UIControl myControl變量放在我的MainView.h或FlipsideView.h文件中,然後將Interface Builder中的控件綁定到這些變量。然後,我將任何IBAction SomeAction myAction方法放在MainViewController.h和FlipsideViewController.h文件中,並將事件綁定到Interface Builder中的這些方法。

這似乎在概念上是正確的,但似乎會導致問題。假設我有一個按鈕,單擊它時會更改標籤的文本。因此,Controller不知道我的按鈕的OnTouchUp事件處理程序中標籤的變量名稱是什麼。所以我爲它做了一個@property。但由於MainViewController.view屬性的類型不是MyView,所以無論何時嘗試從視圖控制器訪問這些屬性,都會收到警告或錯誤。

我這樣做是否正確?有一個更好的方法嗎?如果這是正確的,我如何正確使用這些變量而不會收到警告或錯誤?

感謝

這裏的一些代碼,顯示我在做什麼:

MainView.h

#import ... 

@interface MainView : UIView 
{ 
    IBOutlet UILabel* label; 
    IBOutlet UIButton* button; 
} 

@property UILabel* label; 
@property UIButton* button; 

@end 

MainViewController.m

-(void) buttonTouchUp:(id) sender 
{ 
    self.view.label.text = @"The button was pressed!"; //This gives error because label is not in the view structure or union 
    [self.view label].text = @"The button was pressed!"; //This gives a warning 
} 

我知道我能投的觀點是正確的類型,但這似乎是一個黑客工作。 我知道我可以忍受這個警告,但一個警告告訴我,我正在做一些我可能不應該做的事情。我不相信SDK會讓我不得不一直做這樣的事情。

我必須誤解View應該是什麼,我錯誤地使用它。

+0

「因此,控制器不知道標籤的變量名稱在我的按鈕的OnTouchUp事件處理程序中,因此我爲它創建了一個@property,但由於MainViewController.view屬性不是的類型MyView,每當我嘗試從視圖控制器訪問這些屬性時,我都會收到警告或錯誤。「 - 請你能發佈相關的代碼嗎? – 2010-03-27 19:02:37

回答

2

我已經看到並編寫的大部分代碼都保留了控制器上的所有插座和操作。該按鈕向控制器發送消息(通過IBAction),然後控制器更新標籤(通過IBOutlet)。換句話說,在你的觀點上打網點是不尋常的。

視圖不應該被連接到其他視圖,除非它們有一些特殊的關係,比如可能是一個UIWebView的後退/前進按鈕......但即使如此,你發現你需要一個控制器來啓用/禁用按鈕作爲適當的。

+0

所以如果我把所有東西都放在ViewController上,那麼讓View類放在第一位有什麼意義呢?如果我只是把所有東西放在ViewController中? – Joel 2010-03-28 05:03:52

+2

View類的要點是在屏幕上繪製東西並接收觸摸事件。大多數時候你使用Apple的視圖類,你只能自己寫一個自定義的小部件,或者如果你正在編寫一個遊戲。 – benzado 2010-03-28 06:49:44

+0

哦,好的。我只是對View的用途感到困惑。我想我有一些代碼來修復。這使得更有意義。 感謝您的澄清。 – Joel 2010-03-28 22:51:30

相關問題