Ответ 1
rdelmar дает ответ здесь: взаимодействовать с панелью контроллера навигационной панели с вложением контейнера в контейнере
не может получить доступ к родительскому элементу, пока viewWillAppear
У меня есть VC (корень VC контроллера навигации) с видом контейнера. Вид контейнера встраивает другой VC. Я считаю, что это делает последнего ребенком VC первого. Я хочу добавить кнопку в панель навигации из кода для дочернего VC. Я попытался использовать parentviewcontoller, но он не работает:
UIBarButtonItem *newConvoButton = [[UIBarButtonItem alloc] initWithTitle:@"New convo" style:UIBarButtonItemStyleBordered target:self action:@selector(newConvoInit:)];
self.parentViewController.navigationItem.rightBarButtonItem = newConvoButton;
И я знаю, что код будет работать нормально, если бы он был в родительском VC, и я удалил ".parentViewController".
Итак, как я могу добавить элемент навигации из встроенного VC?
EDIT:
Вот скриншот:
TVC в правильных журналах (null) для self.parentViewController.
rdelmar дает ответ здесь: взаимодействовать с панелью контроллера навигационной панели с вложением контейнера в контейнере
не может получить доступ к родительскому элементу, пока viewWillAppear
Я кодирую ваш сценарий, а self.parentViewController.navigationItem работает для меня. Вы уверены, что вызываете addChildViewController? Я просто не вижу, как parentViewController равен нулю, если вы вызываете addChildViewController. Я должен признать, что хотя self.parentViewController.navigationItem работает для меня, выяснение того, как кто управляет элементами навигации, родителем или ребенком, является довольно сложным. С типичными стековыми навигационными стеками pushViewController каждый контроллер имеет тенденцию иметь собственное время навигации (UINavigationItem). В моем случае я хочу, чтобы родительский элемент управлял некоторыми элементами панели навигации, но я хочу, чтобы дети добавляли/контролировали другие.
В представленииDidAppear
-(void)viewDidAppear:(BOOL)animated
{
UIBarButtonItem *rightItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"add_baby"]
style:UIBarButtonItemStyleBordered
target:self
action:@selector(addNewBaby)];
[self.parentViewController.navigationItem setRightBarButtonItem:rightItem];
}