[英]Update parent view from child view
我正在使用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的颜色。
一种快速但不太干净的方法是直接调用您的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];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.