如何从子视图中的ViewController访问数据?

Mil*_*k78 2 iphone sdk subview viewcontroller ios

我有一个viewcontroller,它包含一个包含带有一堆数据的字典对象的实例变量.视图相当复杂,包含几个子视图,我从单独的视图文件中实例化和嵌入(为了避免在实际的viewcontroller中有一千行UI代码) - 但是这些子视图如何存在于他们自己的文件中,可以访问来自viewcontroller的我的字典对象?因此,当我编辑DescriptionView.m文件时 - 如何从ViewController访问locationData字典对象的内容?

希望你明白我的意思.

这是ViewController的一个片段:

CaseViewController.h

#import "DescriptionView.h"

@interface CaseViewController : UIViewController {
    NSDictionary *locationData;

    DescriptionView *descriptionView;
}

@property (nonatomic, retain) NSDictionary *locationData;
@property (nonatomic, retain) DescriptionView *descriptionView;

@end
Run Code Online (Sandbox Code Playgroud)

CaseViewController.m

- (void)loadView {
    UIView *view = [[UIView alloc] init];

    descriptionView = [[DescriptionView alloc] initWithFrame:CGRectMake(0, 130, 320, 237)];
    descriptionView.hidden = NO;

    [view addSubview:descriptionView];

    self.view = view;
    [view release];
}
Run Code Online (Sandbox Code Playgroud)

Max*_*Max 5

理想情况下,您永远不应该从视图中访问viewcontroller的任何属性.MVC架构的主要思想是viewcontroller告诉它的视图呈现什么,而不是相反.因此,您只需提供视图在初始化期间渲染所需的所有数据:

- (void)loadView { 
    UIView *view = [[UIView alloc] init];

    descriptionView = [[DescriptionView alloc] initWithFrame:CGRectMake(0, 130, 320, 237) paramDict: self.locationData]; descriptionView.hidden = NO;

    [view addSubview:descriptionView];

    [descriptionView release]; // BTW add this line here (or in dealloc) or you'll have a leak

    self.view = view; [view release]; 
}
Run Code Online (Sandbox Code Playgroud)

如果需要动态更新视图,则应在视图中添加一些方法,并从viewcolnroller中调用它们.例如:

DescriptionView.m:

-(void) updateWithDict:(NSDictionary*) udict;
Run Code Online (Sandbox Code Playgroud)

如果你需要在按下DescriptionView中的某个按钮(或任何其他用户交互)时执行某些操作,那么一个好主意就是声明一个像DescriptionViewDelegate这样的协议(或像这样的smth):

-(void) descriptionViewButton1Pressed:(DescriptionView*) dview;
-(void) descriptionViewButton2Pressed:(DescriptionView*) dview;
Run Code Online (Sandbox Code Playgroud)

然后让你的CaseViewController成为委托并在那里实现那些方法.