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)
理想情况下,您永远不应该从视图中访问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成为委托并在那里实现那些方法.
| 归档时间: |
|
| 查看次数: |
2908 次 |
| 最近记录: |