2010-05-06 6 views
0

Я работаю на вид на основе iPhone приложение, которое имеет следующий поток:Навигационный контроллер не Нажимать/Popping View Controllers

search -> (list | map) -> details

для выполнения переходов между видами, у меня есть UINavigationController, с поиском который является корнем. После того, как пользователь выполняет поиск, я перехожу к представлению с сегментированным элементом управления, который действует как вкладка для переключения между списком и функциональностью карты (по предложению от related question, который у меня был). Это представление содержит UIViewController, который позволяет мне переключаться между представлением списка/карты, когда пользователь удаляет сегментированный элемент управления. Я до конца этого до конца. Другими словами, я могу перейти из вида поиска в SwitchViewController, который отвечает за возможность переключения между списком и видами карты. Из SwitchViewController я также могу перейти к представлению поиска.

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

Ниже представлен метод делегата (из моего контроллера списка), чтобы обрабатывать кнопку раскрытия информации. Я установил точки останова, поэтому я знаю, что код работает. Контроллер навигации просто не хочет нажимать на элемент detailController на стек (я предполагаю, что у меня нет указателя на правильный UINavigationController).

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath { 
if (detailController == nil) 
{ 
    detailController = [[DetailsViewController alloc] init]; 
} 

[self.navigationController pushViewController:detailController animated:YES]; 
}

Предполагая, что я, вероятно, отсутствует указатель навигации контроллера, я выставил свойство UINavigation в моем списке и вид карты (navigationController предназначен только для чтения) и инициализировать их с указателем навигации контроллер от моей SwitchViewController (view отвечает за переключение между видами списка/карты, когда пользователь меняет значение сегментированного элемента управления). К сожалению, это не решило проблему.

Есть ли я на правильном пути? Если да, то как я вижу, что у моего представления есть указатель на правильный контроллер навигации? Должен ли я добавить делегат, который позволяет мне вызвать функцию в SwitchViewController, которая переходит в представление деталей (это кажется грязным)?

+1

Является ли ваше приложение на основе представления? – Warrior

+0

Да! Спасибо за вопрос. Я обновлю свой текст, чтобы указать на это. – senfo

ответ

1

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

2

Вы уверены, что у вас есть контроллер навигации? В коде введите NSLog(@"%@",self.nagivationController);. Если он появляется NULL, тогда у вас проблемы.

Кроме того, попробуйте [self.parentViewController.navigationController pushViewController:detailController animated:YES]; .

+0

Спасибо за ответ. Приносим извинения за задержку ответа. Когда я пытаюсь это сделать, я получаю следующий вывод: 2010-05-07 11: 25: 44.861 MyAppName [2095: 207] (null). Я знаю, что у меня есть контроллер навигации, потому что я использую его для перехода от просмотра к представлению списка/карты. Я также попытался получить доступ к контроллеру навигации родителей. К сожалению, это не помогло. – senfo

2

Для реализации навигационного контроллера в представлении на основе приложения.

Поместите этот код

В делегатом .h класс

 MyViewController *viewController; 

В делегат .m класса

- (void)applicationDidFinishLaunching:(UIApplication *)application {  

UINavigationController *nvcontrol =[[UINavigationController alloc] initWithRootViewController:viewController]; 

[window addSubview:nvcontrol.view]; 

[window makeKeyAndVisible]; 

} 

Здесь "MyViewController" должен быть заменен на ваш ViewController.

После реализации этого в деле делегирования ваш код будет работать.

Все лучшее.

+0

Просто убедитесь, что я правильно слежу за вами. Я добавил контроллер навигации в файл MainWindow.xib через Interface Builder, где я также настроил корневой нить. Я верю, что вы предлагаете здесь, что я просто делаю то же самое, но в коде. Это верно? Важно отметить, что контроллер навигации работает до тех пор, пока я не доберусь до переключателя SwitchViewController (вид, который позволяет мне переключаться между списком и видами карты). – senfo