从另一个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]; }