从另一个class级访问IBOutlet

嘿,我有两个UIViewControllers 。 在第一个,有一个包含图像的UIButton 。 当用户到达我的第二个ViewController ,有许多button,其中包含不同的图像。 所以,当用户在我的VC2中按下一个button时,它应该将自己的图像设置到我的VC1上的UIButton。

我已经实现了第一个VC,在@interface ViewController2 ()之前添加了: #import "ViewController1.h"ViewController2.m

我怎样才能做到这一点? 例如:

VC2:

 - (IBAction)seaButton:(id)sender { //Access the IBOutlet from VC1 and set the image of the Button like: UIImage * seaBtnImage = [UIImage imageNamed:@"Sea.png"]; [buttonOutlet setImage:seaBtnImage forState:UIControlStateNormal]; } 

谢谢!

步骤1:在ViewController2.h中,在VC2上创build一个属性来引用VC1:

 #import "ViewController1.h" @property (nonatomic, strong) ViewController1 *viewController1; 

步骤2:在VC1中创buildVC2时,设置属性:

 [viewController2 setViewController1:self]; 

第三步:在ViewController2上设置button图像

 [self.buttonVC2 setImage:[self.viewController1.buttonVC1 imageForState:UIControlStateNormal] forState:UIControlStateNormal]; 

注意:更好的模型是在VC1上提供返回正确图像的方法。 例如在VC1中:

 - (UIImage *)imageForButton { return [self.buttonVC1 imageForState:UIControlStateNormal]; } 

并在VC2:

 [self.buttonVC2 setImage[self.viewController1 imageForButton]]; 

这就是代表们踢进来的地方。定义如下:

 @protocol ButtonSelectionDelegate <NSObject> - (void)didSelectButtonImage:(UIImage *)image; @end 

并在VC1中实现。 将以下属性添加到VC2:

 @property (nonatomic, weak) id<ButtonSelectionDelegate> delegate; 

并将VC1设置为VC2的委托。

在VC2的IBAction您将通过传递本地select的图像来调用委托上方的didSelectButtonImage:方法:

 - (IBAction)seaButton:(id)sender { UIImage *seaBtnImage = [UIImage imageNamed:@"Sea.png"]; [self.delegate didSelectButtonImage:seaBtnImage]; } 

在VC1的didSelectButtonImage:您将使用代表团提供的VC2更新socketsbutton图像:

 - (void)didSelectButtonImage:(UIImage *)image { [self.buttonOutlet setImage:image forState:UIControlStateNormal]; }