从views子视图类中访问控制器变量或方法

时间:2011-02-10 20:01:01

标签: iphone objective-c view parent viewcontroller

晚上好, 这是问题,[self.view addSubview:pauseView]; 在暂停视图加载到当前视图之前,BOOL isPaused将变为false,然后出现子视图。我试图通过暂停视图将变量的值更改为false,但由于它不在当前类上,我无法执行此操作。 我知道stackoverflow已经涵盖了这个主题,但我仍然无法解决我的问题。如果我能够解决这个问题,它将解决我的其他3个应用程序中的同类问题。

此致 Sonic555gr

2 个答案:

答案 0 :(得分:0)

将isPaused定义为定义isPaused的类中的属性(让我们称之为MasterView):


// inside MasterView.h
@property (nonatomic,assign) BOOL isPaused;

然后让你的子视图暂停查看一个自定义的UIView子类(让我们称之为PauseView),并在这个子类中定义一个名为master的类型为MasterView的属性:


// inside PauseView.h
@property (nonatomic,assign) MasterView *master

然后当你分配/初始化你的pauseView时,只需设置这个属性:


// somewhere inside MasterView.m
PauseView *pauseView = [[PauseView alloc] initWithFrame:frame];
pauseView.master=self;

最后在您的PauseView类中,在您要更改isPaused属性的代码中,执行以下操作:


// somewhere in PauseView.m
master.isPaused=YES

答案 1 :(得分:0)

你真的应该考虑一下你的架构,并尝试将你的应用程序逻辑从UIViews转移到控制器(即代理可能是一个不错的选择,但如果没有看到更多的代码和你是什么就不可能知道试图实现)。

如果你坚持从UIView操作变量,你需要在初始化时将viewController的引用传递给pauseView。

因此,在PauseView类中,您将创建一个自定义初始化程序:

-(id)initWithFrame:(CGRect)frame andViewController:(id)vc {
   self = [super initWithFrame:frame];
   if (self) {
       // Any other custom initialisation here
   }
}