从另一个类访问IBOutlet

时间:2014-08-31 16:53:04

标签: ios objective-c xcode uibutton iboutlet

嘿,我有两个UIViewControllers。在第一个中,有一个UIButton,其中包含一个图像。当用户进入我的第二个ViewController时,有许多按钮,其中包含不同的图像。因此,当用户在我的VC2中按下一个按钮时,它应该将图像从其自身设置为我的VC1上的UIButton。

我已经通过添加以下内容实现了第一个VC: 在#import "ViewController1.h"

之前的ViewController2.m @interface ViewController2 ()

我该怎么做?例如:

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];
}

谢谢!

2 个答案:

答案 0 :(得分:2)

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

#import "ViewController1.h"

@property (nonatomic, strong) ViewController1 *viewController1;

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

[viewController2 setViewController1:self];

步骤3:在ViewController2上设置按钮图像

[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]];

答案 1 :(得分:1)

代表们参与的地方。定义如下内容:

@protocol ButtonSelectionDelegate <NSObject>

- (void)didSelectButtonImage:(UIImage *)image;

@end

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

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

并将VC1设置为VC2的委托。

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

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

在VC1的didSelectButtonImage:中,您将使用委派提供的一个VC2更新插座按钮图像:

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