Почему self.navigationController = nil из метода - PullRequest
0 голосов
/ 18 октября 2010

По какой-то неизвестной причине я не могу выдвинуть представление, я постараюсь объяснить как можно лучше, но у меня происходит много сложных представлений, и это было бы кошмарным объяснением, но сказать, что у меня есть следующий метод.

 -(void)showDetailView{ 
DetailViewController *detailView = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
 [self.navigationController pushViewController:detailView animated:YES];
 [detailView release]; 
  }

То, что работает и помещает подробный вид в стек, это мое главное окно и основной поток.

Итак, в табличном представлении у меня есть ячейка с подпредставлением, которое затем берет свое представление из другого контроллера представления. В этом контроллере представления у меня больше подпредставлений, и я говорю, что когда пользователь щелкает подпредставление, вызывается метод. Который в свою очередь вызовет этот метод на mainView.

Таким образом, можно было бы поверить, что тогда нужно отодвинуть новый взгляд. И код выполняется, ошибок не возникает, но представление не изменяется / не переключается.

Я пробовал различные методы проталкивания представления внутри контроллера представления, из которого оно вызывается. а затем просто вызвать метод, который напрямую подключен к контроллеру навигации, чтобы выдвинуть представления.

Несколько вещей, чтобы добавить. 1. У меня есть кнопка IBAaction, которая выдвигает представление (работает нормально) 2. Я предполагаю, что это потому, что я просмотрел очень много представлений, но я предполагаю, что если вы вызовете контроллер push-представления, он будет выдвигать любое представление, которое вы передадите. 3. Я проверил, когда метод вызывается из основного представления. Self.navigationcontroller not = null.

Но если навигационный контроллер вызывается с помощью метода, вызывайте его = null.

Так есть ли способ восстановить нулевое значение контроллера навигации?

Я немного сбит с толку, почему я не могу просто вызвать метод, чтобы выдвинуть представление

Спасибо

Ответы [ 2 ]

1 голос
/ 11 июня 2011

У меня сегодня была почти такая же проблема.Если панель навигации скрыта, когда вы нажимаете на вид, у вас может быть нулевой контроллер навигации.Я решаю проблему следующим образом:

self.navigationController.navigationBarHidden = NO; // So the navigation controller is not nil
[self.navigationController pushViewController:articleInfoController animated:YES];
1 голос
/ 19 октября 2010

Хорошо, теперь я отсортировал

С точки зрения того, как я решил получить доступ к превосходному суперпредставлению, на мой взгляд, это

Идентификационный тег для суперпредставления представлений, в котором находится мое подпредставление

id CellController = [self.view.superview.superview nextResponder];
[CellController performSelector:@selector(showDetailView:) withObject:Link];

Затем вызывается метод в моей ячейке, который, в свою очередь, получает доступ к его суперпредставлению

id mainController = [self.view.superview.superview nextResponder];
[mainController performSelector:@selector(showDetailView:) withObject:Link];

Который затем главный все еще сохраняет свой контроллер навигации, а затем в методе show detail в основном передает ссылку и выдвигает новое представление.

По сути, общее суперпредставление подпредставления не может быть выше, чем там, где оно было создано. Таким образом, подпредставление в моей ячейке никогда не могло получить доступ и запустить что-либо через мой mainView должным образом, я мог напичкать, но он никогда не выполнял, как это должно быть. Так что доступ к его супервизору высшего уровня, а затем получение его для доступа к суперпредставлению, так как ячейка находится в моем главном представлении, тогда я мог бы правильно запускать методы.

Надеюсь, это имеет смысл, только обдумывая все это.

Благодаря -> Как получить доступ к контроллеру представления супер-пользователя?

Для бита тега Id, таким образом не использованный Id, так что другие вещи узнали

...