Сделайте пользовательскую кнопку возврата для UINavigationController
Я разрабатываю приложение для iOS 4.2+. Я подкласс UINavigationController
вставить два UIImageView
и сделать панель навигации выглядеть нестандартно. Все работает отлично, но у меня есть небольшая проблема. Я создал кастом UIBarButtonItem
и внутри моих контроллеров представления я помещаю их с:
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:backButton];
Это тоже работает, но проблема в том, что для этой работы мне нужно позвонить из:
- (void)viewDidAppear:(BOOL)animated ;
Таким образом, он появляется только после анимации, и я могу видеть не настроенную кнопку за 1 секунду до того, как измененная кнопка заменит ее.
(Я пробовал с viewWillAppear
но потом ничего не добавляешь в панель навигации)
Я хотел бы знать, если у вас есть решение, которое может исправить эту проблему.
PS: я никогда не пользуюсь IB, все сделано программно.
Спасибо из Франции!
РЕДАКТИРОВАТЬ 1: вот код, который ничего не показывает для viewWillAppear
:
- (void)viewWillAppear:(BOOL)animated {
[self setTitle:@"Jeu"];
//Bouton testflight
TIFButton *testFeedbackButton = [[TIFButton alloc]init];
[testFeedbackButton setTitle: @"Envoyer un Feedback" forState:UIControlStateNormal];
[testFeedbackButton addTarget:self action:@selector(launchFeedback) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *testFeedback = [[UIBarButtonItem alloc] initWithCustomView:testFeedbackButton];
self.navigationItem.rightBarButtonItem = testFeedback;
TIFBackButton *backButton = [[TIFBackButton alloc]init];
[backButton setTitle: @"Retour" forState:UIControlStateNormal];
[backButton addTarget:self action:@selector(popToPrecedentViewController) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithCustomView:backButton];
}
3 ответа
Допустим, у вас есть два контроллера ViewController, A и B, вы помещаете B в стек, когда A является самым верхним, и вы хотите настроить кнопку возврата, которая отображается, когда B находится сверху.
Как правило, способ сделать это состоит в том, чтобы установить ViewController AnavigationItem.backBarButtonItem
,
Вместо этого вы должны дать ViewController B пользовательскую кнопку в левой части панели навигации, установив navigationItem.leftBarButtonItem
,
Вы прекрасно реализовали этот подход, за исключением того, что даже если вы не установите ViewController AnavigationItem.backBarButtonItem
по умолчанию вы по-прежнему получаете кнопку возврата по умолчанию. Так что эта кнопка, вероятно, появляется поверх вашей пользовательской кнопки возврата.
Если вы установите ViewController B's navigationItem.hidesBackButton = YES
тогда у вас не должно быть никаких проблем.
И в будущем, когда вы реализуете пользовательские кнопки "Назад", вы должны сделать это, установив navigationItem.backBarButtonItem
вместо navigationItem.leftBarButtonItem
, Единственное, что вам нужно сделать, это то, что при таком подходе вы, например, будете использовать ViewController AnavigationItem
изменить кнопку назад, которая появляется, когда ViewController B находится сверху.
UIBarButtonItem *backButton = [UIBarButtonItem new];
[backButton setTitle:@"Back"];
[[self navigationItem] setBackBarButtonItem:backButton];
Этот код вы должны упомянуть в предыдущем контроллере представления, тогда только следующая кнопка возврата по умолчанию появилась в следующем контроллере представления.
Наслаждаться!!!
Я придумала несколько универсальное решение: /questions/39909252/iphone-polzovatelskij-uibarbuttonitem-dlya-knopki-nazad/39909262#39909262 Оно включает в себя категорию на UIViewController и требует минимального кода, чтобы кнопка возврата изображения была на всех ваших экранах.