Кнопка «Назад» не отображается в контроллере с нажатой панелью - PullRequest
6 голосов
/ 06 августа 2010

У меня проблема в том, что я могу успешно выдвинуть новый контроллер представления из моего корневого контроллера представления (используя приложение на основе навигации с использованием шаблона Core Data), но подробное представление, которое является отдельным файлом 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, но кнопка возврата не отображается , как это. У меня сложилось впечатление, что это была «бесплатная» функция использования контроллера навигации. Как и следовало ожидать, это очень неприятный блокпост, и я был бы признателен за любую помощь.

Ответы [ 5 ]

14 голосов
/ 06 августа 2010

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

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

9 голосов
/ 06 августа 2010

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

self.navigationItem.title = @"Hello Der";
1 голос
/ 25 октября 2010

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

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

0 голосов
/ 22 марта 2013

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

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

0 голосов
/ 28 февраля 2013

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

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

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