2010-08-06 3 views
6

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

RootViewController.h

@class ItemsViewController; 

@interface RootViewController : UITableViewController <NSFetchedResultsControllerDelegate> { 

IBOutlet ItemsViewController *itemsVC; 

} 

@property (nonatomic, retain) IBOutlet ItemsViewController *itemsVC; 

@end 

RootViewController.m

#import "ItemsViewController.h" 

@synthesize itemsVC; 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
// Pushes to ItemsViewController 

ItemsViewController *itemsViewController = [[ItemsViewController alloc] initWithNibName:@"ItemsViewController" bundle:[NSBundle mainBundle]]; 

[self.navigationController pushViewController:itemsViewController animated:YES]; 
[itemsViewController release]; 

} 

ItemsViewController является UITableViewController подкласс со своим XIb, также под названием ItemsViewController. Опять же, он выталкивается из RootViewController, но кнопка «Назад» не отображается like this. У меня создалось впечатление, что это «бесплатная» функция использования навигационного контроллера. Как и следовало ожидать, это очень расстраивающий блокпост, и я был бы признателен за любую помощь.

+0

У меня была такая же проблема, пока вы не увидели это сообщение. Это действительно странное поведение по умолчанию. Почему не просто «Назад», если заголовок не указан? –

+0

Да, это или какая-то ошибка или предупреждение в Xcode было бы неплохо. –

ответ

14

Ваш ItemsViewController класс устанавливает свой title объект в своем viewDidLoad методе?

Вы должны позвонить [tableView deselectRowAtIndexPath:indexPath animated:YES] в качестве последней строки tableView:didSelectRowAtIndexPath:, чтобы соответствовать руководящим принципам человеческого интерфейса Apple.

+0

Я еще не определил название. Это будет происходить из свойства имени CD, которое входит в RVC. Должно ли быть указано название для кнопки «Назад»? –

+1

Правда. Но вы всегда должны иметь заголовок на панели навигации. Как насчет этого: устанавливаете ли вы 'title' в методе' viewDidLoad' RootViewController'? Раньше у меня были проблемы с кнопкой «Назад», когда заголовок корневого представления не был установлен. –

+1

Извините, пока я поднимаю лицо от стола.Установка заголовка в RVC дала мне кнопку «Назад». Я предполагаю, что он должен быть заполнен до того, как он появится. Спасибо за подсказку, я не забуду об этом в ближайшее время! –

9

Да, убедитесь, что у вас есть заголовок на RootViewController, если он не появится. Чтобы задать название программно;

self.navigationItem.title = @"Hello Der"; 
1

Некоторой дополнительная информация для будущих читателей: Я столкнулся с этой проблемой при попытке повторного заполнения иерархии нав на нагрузке приложения, так что я звонил setViewControllers: от заявления приложения делегата: didFinishLaunchingWithOptions: метод. И я столкнулся с той же проблемой, когда кнопка «Назад» не появилась.

В моем случае установка заголовка элемента управления контроллера корневого представления в своем представленииDidLoad не работала, по-видимому, потому, что сначала были загружены другие представления и видя, что заголовок root равен нулю. Вместо этого я установил заголовок элемента навигации контроллера корневого представления в своем приложении: метод didFinishLaunchingWithOptions: прямо перед вызовом setViewControllers :, и это исправило его.

0

Попробуйте следующий фрагмент. Это работает для меня!

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"Image.png"] forBarMetrics:UIBarMetricsDefault]; 

[self.navigationController.navigationBar bringSubviewToFront:[self.navigationController.navigationItem backBarButtonItem]]; 
0

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

oops: [self presentModalViewController: navController animated: YES]; означает: [self.navigationController pushViewController: контроллер анимированный: ДА];

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