繁体   English   中英

从子视图更新父视图

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM