从子viewcontroller设置父viewcontroller类的属性值?

Bry*_*n C 3 iphone scope objective-c uiviewcontroller

有谁知道如何从子视图(子)视图控制器更新属性值?我有一个名为statusid的int属性,在父视图控制器中使用gettor/settor定义.[self.view addSubview:detailsVC.view];

在子子视图中,我尝试调用[super statusid:updatedValue]; 将statusid更新为新值,但这会产生错误.如何更新父级中的statusid?有人知道怎么做吗?

gab*_*tub 6

使用"super"访问您的基类,即当前类继承的基类

要做你所解释的,你需要访问父视图的属性,这是相当复杂的,因为这很可能会因两个类试图互相引用而结束.因此,你很可能必须创建一个委托模式,看起来有点像这样

ParentView.h

@protocol IAmYourFatherAndMotherProtocol

@class ChildView;

@interface ParentView : UIViewController <IAmYourFatherAndMotherProtocol>
{
NSInteger statusID;
}

@property (nonatomic) NSInteger statusID;

@protocol IAmYourFatherAndMotherProtocol
@property (nonatomic) NSInteger statusID;
@end

@end
Run Code Online (Sandbox Code Playgroud)

在ChildView.h中

#import "ParentView.h"

@interface ChildView : UIViewController
{
  id<IAmYourFatherAndMotherProtocol> delegate;
}

@property (nonatomic, assign) id <IAmYourFatherAndMotherProtocol> delegate;
Run Code Online (Sandbox Code Playgroud)

在ParentView.m中创建ChildView时,您必须将"self"设置为委托,例如:

ChildView *newChild = [[ChildView alloc] init];
newChild.delegate = self;
Run Code Online (Sandbox Code Playgroud)

通过这样做,您可以在ChildView.m中访问ParentView的"statusID",如下所示:

delegate.statusID = 1337;
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助