Ios 从子视图更新父视图
我使用的是Xcode 5(iOS SDK 7.0)。我正在尝试从子视图更新父视图中的元素 我有以下文件: ViewOneController ViewTwoControllerIos 从子视图更新父视图,ios,objective-c,Ios,Objective C,我使用的是Xcode 5(iOS SDK 7.0)。我正在尝试从子视图更新父视图中的元素 我有以下文件: ViewOneController ViewTwoController [self.delegate somethingHappenedInViewTwoController]; 在ViewOneController中,我将ViewTwoController添加为子视图,代码如下: [self.view addSubview:ViewTwoController]; 我在ViewOneCo
[self.delegate somethingHappenedInViewTwoController];
在ViewOneController中,我将ViewTwoController添加为子视图,代码如下:
[self.view addSubview:ViewTwoController];
我在ViewOneController.h中定义了UIImageView
IBOutlet UIImageView *box;
@protocol ViewTwoDelegate <NSObject>
- (void)somethingHappenedInViewTwoController;
@end
@interface ViewTwoController : UIViewController
....
@property (nonatomic,weak) id<ViewTwoDelegate> delegate;
我想从ViewTwoController更新框的背景颜色。我知道我可以用下面的代码更新背景色
[box setBackgroundColor:[UIColor redColor]];
但这仅适用于ViewOneController。我有一个名为updateColor的函数是ViewTwoController。我想通过该函数更新框的颜色。一种快速且不太干净的方法是直接调用您的parentviewcontroller:
[((ViewOneController*)self.parentViewController).box setBackgroundColor:[UIColor redColor]];
然而就像Larme建议的那样,我相信最干净的方法是使用委托,它用于在用户做了某件事之后通知更改。这里有一个教程
您必须在ViewTwoController.h中创建代理协议
IBOutlet UIImageView *box;
@protocol ViewTwoDelegate <NSObject>
- (void)somethingHappenedInViewTwoController;
@end
@interface ViewTwoController : UIViewController
....
@property (nonatomic,weak) id<ViewTwoDelegate> delegate;
您可以在下面添加以下方法
- (void)somethingHappenedInViewTwoController{
[box setBackgroundColor:[UIColor redColor]];
}
然后在ViewTwoController.m中调用此方法,它将调用在ViewOneController中实现的方法
[self.delegate somethingHappenedInViewTwoController];
你可以使用委托方法。我忘了说,我对iOS应用程序开发完全是新手,所以请举一个例子来参考一个例子。你的命名约定有点混乱。UIView子类通常不包括控制器作为名称的一部分。也许最好的方法是按照Justafinger的解决方案。除此之外,鉴于viewTwoController是UIView子类,viewTwoController中的@interface声明将如下所示:;“@interface ViewTwoController:UIView”(减去引号-因此在使用“@”时会抱怨通知)我还没有尝试过代理。第一个不起作用。给出了以下错误:“在“ViewTwoController*”类型的对象上找不到属性“parentViewController”。如果ViewTwoController是UIView(顺便说一下,这是一个非常糟糕的名称),则必须使用委托