我正在使用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的颜色。
答案 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];