Доступ к iOS parentViewController для изменения состояния UIButton setSelected:YES
У меня есть UIButton в MainViewController.
MainViewController имеет childViewContoller.
Мне нужно получить доступ к свойству UIButton (tcButton) в MainViewController ОТ childViewController и установить его в setSelected:YES в viewDidLoad. У меня есть следующий код в моем файле ChildViewController.m, и он не работает.
#import "ChildViewController.h"
#import "MainViewController.h"
#import "CoreData.h"
@interface ChildViewContoller ()
@property (nonatomic, strong) CoreData *coreData;
@property (nonatomic, strong) MainViewController *mainViewController;
@end
@implementation ChildViewController
@synthesize coreData, mainViewController;
-(void)viewDidLoad
{
[super viewDidLoad];
self.managedObjectContext = [(STAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
[[(mainViewController *)self.parentViewController tcButton] setSelected:YES];
}
2 ответа
Ваш код - это беспорядок. Почему вы создаете новый экземпляр себя в viewDidLoad? Это не имеет никакого смысла. Если ChildViewController действительно является дочерним контроллером представления, то вы можете получить доступ к родителю с помощью self.parentViewController. Вам нужна только одна строка в viewDidLoad:
-(void)viewDidLoad // Line 4
{
[[(MainViewController *)self.parentViewController tcButton] setSelected:YES]; // Line 8
}
В вашем коде есть несколько проблем, но основная идея для выполнения того, что вы хотите, это получить указатель на mainViewController. Есть много способов сделать это, но вот простой пример, как вы можете реализовать такую вещь. Например, в инициализаторе ChildViewContoller вы можете передать указатель на mainViewController:
@interface ChildViewContoller ()
@property (nonatomic, strong) MainViewController *mainViewController;
@end
@implementation ChildViewContoller
- (id)initWithMainViewController:(MainViewController *)mainViewController
{
self = [super init];
if (self)
{
_mainViewController = mainViewController;
}
return self;
}
- (void)viewDidLoad
{
[_mainViewController.tcButton setSelected:YES];
}
@end
Пожалуйста, обратите внимание, что я не проверял приведенный выше код, но вы можете понять это.