Проблема переопределения кнопки «Назад» в iOS - PullRequest
0 голосов
/ 08 сентября 2011

У меня есть UITableViewController A, который помещает UITableViewController B в стек.

В A у меня есть код:

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Trending" 
                                                                                     style:UIBarButtonItemStylePlain 
                                                                                    target:self 
                                                                                    action:@selector(backButtonClicked:)];

backButtonClicked: также реализовано.

B имеет заголовок Trending, но когда я нажимаю на него, он никогда не достигает backButtonClicked:

Почему это?

Ответы [ 3 ]

1 голос
/ 08 сентября 2011

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

Пользовательское действие на элемент кнопки "Назад"

Или вы можете просто сделать следующее в viewControllerB:

self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Trending" 
                                                                             style:UIBarButtonItemStylePlain 
                                                                            target:self
                                                                            action:@selector(backButtonClicked:)] autorelease];

Затем также добавьте это к viewControllerB

- (void)backButtonClicked:(id)sender {

    [[[self.navigationController viewControllers] objectAtIndex:0] backButtonClicked:sender];

    [self.navigationController popViewControllerAnimated:YES];

}

Приведенный выше метод найдет RootViewController и отправит ему сообщение backButtonClicked. Затем он отобразит текущий контроллер вида, что должно позволить вам эмулировать backBarButtonItem. Также вы можете изменить, какой контроллер представления вы хотите отправить сообщение, изменив значение в методе objectAtIndex.

1 голос
/ 08 сентября 2011

Попробуйте либо установить делегата:

[navigationController setDelegate:self];

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

self.navigationItem.leftBarButtonItem =  [[UIBarButtonItem alloc] initWithTitle:@"Trending" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClicked:)];

Кроме того, вы можете попробовать установить элемент кнопки B вместо A:

viewControllerB.navigationItem.backBarButtonItem =  [[UIBarButtonItem alloc] initWithTitle:@"Trending" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClicked:)];
0 голосов
/ 08 сентября 2011

попробуйте не backBarButtonItem, а leftBarButtonItem вместо

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Trending" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClicked:)];
self.navigationItem.hidesBackButton=YES;

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

UIBarButtonItem *myBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Trending" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonClicked:)];
self.navigationItem.leftBarButtonItem = myBackButton;
[myBackButton release];
self.navigationItem.hidesBackButton=YES;
...