2010-03-27 80 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