почему кнопка «Назад» не отображается с этим кодом (вопрос UINavigationController) - PullRequest
2 голосов
/ 27 февраля 2011

Невозможно заставить кнопку Back появляться в потоке UINavigationController. Я просто хочу, чтобы он автоматически вызывал всплывающее окно текущего контроллера, чтобы вернуться к родителю.

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

@implementation AppointmentListController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"Detailed View";
    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:nil action:nil];
    self.navigationItem.backBarButtonItem = backButton;
    [backButton release];
}

Код для доступа к этому представлению (то есть код в родительском контроллере):

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     AppointmentListController *appointmentListController = [[AppointmentListController alloc] initWithNibName:@"AppointmentListController" bundle:nil];
     [ [self navigationController] pushViewController:appointmentListController animated:YES];
     [appointmentListController release];
}

РЕДАКТИРОВАТЬ: PS с кодом выше, я на самом деле не вижу никакой кнопки вообще появляются слева.

EDIT2: Дэвид, я попробовал кнопку следующего кода кнопки в RootViewController (и вытащил его из AppointmentListController), однако он все равно не отображает какую-либо кнопку возврата?

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];

EDIT3: David - Работал фактически со следующим кодом, за исключением того, что текст был «назад», а не заголовок родительского контроллера, как я после - попытался удалить строку .title =, но тогда кнопка не появилась.

// create a custom navigation bar button and set it to always say "Back"
UIBarButtonItem *temporaryBarButtonItem = [[UIBarButtonItem alloc] init];
temporaryBarButtonItem.title = @"Back";
self.navigationItem.backBarButtonItem = temporaryBarButtonItem;
[temporaryBarButtonItem release];

EDIT4 - плохо - я не установил заголовок родительского контроллера, так что я думаю, что в этом случае он вообще не пытается, но нажимает кнопку «назад», поэтому добавляю «self.title = @« Views » ;» к родительскому контроллеру исправили вещи (и убрали строку, где я вручную ставил тайтл кнопки назад)

EDIT5 - для тех, кто был сбит с толку, как я - поэтому, в конце концов, вам вообще не нужен какой-либо код настройки backBarButtonItem в родительском контроллере - просто нужно было убедиться, что у родительского контроллера установлен «заголовок» и тогда кажется, что все работает автоматически - дох

Ответы [ 4 ]

2 голосов
/ 27 февраля 2011

Кнопка возврата относится не к верхнему контроллеру, а к контроллеру стека второго контроллера.Вы помещаете кнопку "Назад" в свой detailViewController.Вы должны были поставить его на свой UITableViewController.

0 голосов
/ 06 мая 2011

Кнопка «Назад» появляется автоматически, если вы сначала установили заголовок viewController (self.title).

Затем, если вы выдвигаете контроллер вида из контроллера представления, имеющего заголовок «первый вид», у нажатой кнопки будет кнопка «Назад» с надписью «первый вид».

Если вы не установите заголовок, кнопка автоматического возврата появится только при третьем просмотре, но не раньше.

firstController (title: "", back: NO) -> secondController (title: "", back: NO) -> thirdController (title: "", back: YES)

Я не знаю, это ошибка или они этого хотели. Я прочитал руководство по UINavigationController, но ничего не вижу в этом.

0 голосов
/ 27 февраля 2011

В тот момент, когда представление вызывало lOad, соответствующая панель навигации не находится в стеке, вы должны написать код в методе viewdidappear UIViewController

0 голосов
/ 27 февраля 2011

backBarButtonItem - это то, что отображается, когда контроллер представления находится позади другого контроллера представления в стеке навигации.Другими словами, если бы вы поместили контроллер представления поверх него, вместо того, чтобы видеть «Детальный просмотр» на кнопке «Назад», это была бы кнопка отмены.

Чтобы получить желаемое поведение, используйтеleftBarButtonItem

self.navigationItem.leftBarButtonItem = backButton;
...