从子视图更新父视图

时间:2014-04-22 15:27:54

标签: ios objective-c

我正在使用Xcode 5(iOS SDK 7.0)。我正在尝试从子视图更新父视图中的元素。

我有以下文件: ViewOneController ViewTwoController

在ViewOneController中,我使用以下代码将ViewTwoController添加为子视图:

[self.view addSubview:ViewTwoController];

我在ViewOneController.h中有一个UIImageView解析

IBOutlet UIImageView *box;

我想从ViewTwoController更新该框的背景颜色。我知道我可以使用以下代码更新背景颜色。

[box setBackgroundColor:[UIColor redColor]];

但这仅适用于ViewOneController。我有一个名为updateColor的函数是ViewTwoController。我想从该功能更新Box的颜色。

1 个答案:

答案 0 :(得分:0)

一种快速而不那么干净的方法是直接调用你的parentviewcontroller:

[((ViewOneController*)self.parentViewController).box setBackgroundColor:[UIColor redColor]];

然而,像Larme建议的那样,我相信最干净的方法是使用委托,它用于在用户做某事后通知更改。这是一个教程http://www.tutorialspoint.com/ios/ios_delegates.htm

您必须在ViewTwoController.h中创建委托协议

@protocol ViewTwoDelegate <NSObject>
    - (void)somethingHappenedInViewTwoController;
@end

@interface ViewTwoController : UIViewController 
....
@property (nonatomic,weak) id<ViewTwoDelegate> delegate;

在ViewOneController中,您必须将控制器设置为viewTwoController的委托。 在ViewOneController.h中,首先声明控制器实现ViewTwoDelegate协议

@interface ViewOneController:UIViewController<ViewTwoDelegate>

并在ViewOneController.m中创建viewtwoController:

viewtwoController = [[ViewTwoController alloc] init];
viewtwoController.delegate = self;

并在下面添加以下方法

- (void)somethingHappenedInViewTwoController{
    [box setBackgroundColor:[UIColor redColor]];
}

然后在ViewTwoController.m中调用此方法,它将调用ViewOneController中实现的方法

[self.delegate somethingHappenedInViewTwoController];