gpt4 book ai didi

iphone - 如何从 subview 中的 ViewController 访问数据?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:21:08 26 4
gpt4 key购买 nike

我有一个 View Controller ,它包含一个实例变量,该实例变量包含一个带有一堆数据的字典对象。该 View 相当复杂,包含几个我从单独的 View 文件实例化和嵌入的 subview (以避免在实际的 View Controller 中有一千行 UI 代码) - 但是这些存在于它们自己的文件中的 subview 如何访问我的字典对象来自 View Controller ?因此,当我编辑 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

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];
}

最佳答案

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

- (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];
}

如果您需要动态更新您的 View ,那么您应该向您的 View 添加一些方法并从 viewcolnroller 中调用它们。例如:

DescriptionView.m:

-(void) updateWithDict:(NSDictionary*) udict;

如果您需要在按下 DescriptionView 中的某个按钮(或任何其他用户交互)时执行某些操作,一个好主意是声明一个协议(protocol),如 DescriptionViewDelegate(或类似的东西):

-(void) descriptionViewButton1Pressed:(DescriptionView*) dview;
-(void) descriptionViewButton2Pressed:(DescriptionView*) dview;

然后让您的 CaseViewController 成为委托(delegate)并在那里实现该方法。

关于iphone - 如何从 subview 中的 ViewController 访问数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4792179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com