2013-02-10 2 views
1

У меня есть UIButton в MainViewController.
MainViewController имеет childViewContoller.iOS Доступ к parentViewController для изменения состояния UIButton setSelected: YES

Мне нужно получить доступ к свойству UIButton (tcButton) в MainViewController FROM 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 
} 
+0

rdelmar: Я думал то же самое и первым попробовал: [self.parentViewController tcButton] setSelected = YES]; , и это дало мне ошибку: No Visible @interface 'UIViewController' объявляет селектор 'tcButton' Затем я начал поиск по Google и увидел код выше. Однако теперь я пытаюсь выполнить код, и я получаю следующую ошибку: Parse Issue Ожидаемое выражение. Стрелка курсора позиционируется в закрывающей скобке (MainViewController *). Да, у меня есть точка с запятой в конце, я скопировал и вставил ваш код. Благодарю. – user1107173

+0

@ user1107173, О, извините, я набрал это неправильно, он должен быть установленSelected: YES (not =) в конце. – rdelmar

+0

Спасибо за ваш быстрый ответ. Я изменил его на setSelected: YES]; и я все еще получаю то же выражение Parse Issue Expected. Стрелка курсора указывает на близкую скобку (MainViewController *). – user1107173

1

Есть несколько вопросов, в вашем коде, но основная идея, чтобы выполнить то, что вы хотите, получает указатель на 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 

Пожалуйста, не то, что я не проверял код выше, но вы можете получить эту идею.

+0

я получаю 4 ошибки с кодом: (1) само = [супер] инициализации; // Невозможно назначить «я» вне метода в семействе init (2) _mainViewController = mainViewController; // Неожиданное имя интерфейса «MainViewController» ожидаемое выражение (3) return self; // Метод Void initWithMainViewController не должен возвращать значение (4) // Неявное преобразование указателя Object-C в 'void' запрещается в ARC. – user1107173

+0

Извините за это, но, как я уже сказал, я не могу проверить код, не используйте его как есть. Вместо этого попытайтесь понять, что делает код. Я изменил немного кода, чтобы избежать некоторых из эррос, пожалуйста, не то, что это ARC-версия. – kaal101

Смежные вопросы