Вы должны указать на экземпляр MainViewController
и затем изменить настройки для его внутренних компонентов.
Прежде всего, вы должны иметь возможность доступа к этому экземпляру из вашего делегата приложения, по крайней мере, это просто, если вы используете шаблон проекта по умолчанию из XCode. Для этого вы должны использовать этот фрагмент:
MyAppDelegate *app = [[UIApplication sharedApplication] delegate];
MainViewController *view = delegate.mainViewController;
Чтобы убедиться, что это работает, проверьте, доступен ли экземпляр MainViewController
как свойство в заголовочном файле делегата приложения. Вы должны найти что-то вроде этого:
@property(readonly) MainViewController *mainViewController;
Более того, MainViewController
должен предоставлять в качестве свойства искомую кнопку через свой заголовочный файл. Если вы проектируете представление через IB, у вас должно быть что-то вроде этого, я полагаю:
@property(nonatomic, retain) IBOutlet UIButton *lockButton;
Когда у вас есть все эти вещи, вы сможете изменить изображение кнопки следующим образом:
MyAppDelegate *app = [[UIApplication sharedApplication] delegate];
MainViewController *view = delegate.mainViewController;
UIImage *image = [UIImage imageNamed:@"image.png"];
[view.lockButton setImage:btnImage forState:UIControlStateNormal];
Это должно хорошо сработать для вас. Возможно, вам придется адаптировать что-то здесь или там, но именно так вы должны реализовать решение.
Редактировать
Это решение будет работать нормально, но оно не единственное. Другой подход может заключаться в использовании протоколов. То, что вы будете делать, - это создать способ заставить контроллер, сохраняющий пароль, обращаться к контроллеру основного вида.
Ваш PasswordViewController
(давайте назовем новый контроллер представления таким образом) должен определить в заголовочном файле новый протокол. Например.
@protocol PasswordViewControllerDelegate
@required
- (void) passwordChanged;
@end
Тогда ваш MainViewController
должен будет реализовать этот делегат:
@interface MainViewController : UIViewController <PasswordViewControllerDelegate>
....
@end
@implementation MainViewController
....
- (void) passwordChanged {
[lockButton setImage:[UIImage imageNamed:@"myImage.png" forState:UIControlStateNormal];
}
....
}
Теперь в определении PasswordViewController
вам нужно определить свойство с именем delegate
:
@property (nonatomic, retain) id<PasswordViewControllerDelegate> delegate;
Когда вы создаете новый экземпляр PasswordViewController
из MainViewController
, вы должны установить MainViewController
в качестве его делегата:
PasswordViewController pvc = [[PasswordViewController alloc] init];
pvc.delegate = self;
// then you present the view controller
и при изменении пароля в PasswordViewController
вам просто придется вызвать метод делегата. Это так просто, как это:
[self.delegate passwordChanged];