Доступ к IBOutlet из другого класса
Эй у меня два UIViewControllers
, В первом есть UIButton
который содержит изображение. Когда пользователь попадает ко мне вторым ViewController
Есть много кнопок, которые содержат разные изображения. Поэтому, когда пользователь нажимает одну кнопку в моем VC2, он должен установить изображение от себя до кнопки UIB на моем VC1.
Я уже реализовал первый ВК, добавив:#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 ответа
Шаг 1: В ViewController2.h создайте свойство на VC2 для ссылки на VC1:
#import "ViewController1.h"
@property (nonatomic, strong) ViewController1 *viewController1;
Шаг 2: Когда вы создаете VC2 в VC1, установите свойство:
[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]];
Вот где вступают делегаты. Определите что-то вроде:
@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];
}