Изменить заголовок UIBarButtonItem невозможно?

Глупо, я пытаюсь изменить заголовок UIBarButtonItem, если выполняется определенное условие в цикле for. Однако у меня проблемы.

я пытался

self.barButtonItem.title=@"NewTitle"

а также

[self.barButtonItem setTitle:@"New Title"];

После этого я даже сделал setNeedsDisplay для представления без везения. Кстати, да, я получаю старый массив кнопок из self.navigationBar.items, удаляю старую кнопку и устанавливаю новую.

Если я меняю ориентацию экрана (переворачиваю iPad), название кнопки меняется. Но в остальном он остается прежним.

Я что-то упускаю?


person Live2Enjoy7    schedule 03.12.2012    source источник


Ответы (2)


Проблема

Если вы изучите документацию, Apple говорит:

«Вы должны установить это свойство перед добавлением элемента в панель».

По этой причине,

cancel_btn.title = "something"  // It does not work !

Потому что вы уже установили элемент на панель.

Решение

//
let theTitle = "something"

//
self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: theTitle, style: 
UIBarButtonItemStyle.plain, target: self, action: 
#selector(cancelAction))

Теперь вы устанавливаете заголовок перед добавлением элемента на панель.

person Essam Mohamed Fahmi    schedule 16.09.2018

Для этого я использую свойство possibleTitles объекта UIBarButtonItem.

Попробуйте это при создании кнопки:

self.barButtonItem = [[UIBarButtonItem alloc] init...];
self.barButtonItem.possibleTitles = [NSSet setWithObjects:@"Title 1", @"Title 2", nil];

затем позже, чтобы изменить заголовок, выполните:

self.barButtonItem.title = @"Title X"; // must be one of the possibleTitles
person rmaddy    schedule 03.12.2012
comment
хорошее предложение, все то же поведение - работа с ipad перевернута, в остальном остается прежним .. - person Live2Enjoy7; 03.12.2012
comment
в viewDidLoad: self.visitButton=[[UIBarButtonItem alloc]initWithTitle:@Visit style:UIBarButtonItemStyleBordered target:self action:@selector(visitPlace)]; self.visitButton.possibleTitles=[NSSet setWithObjects:@Visit, @Unvisit, nil]; NSMutableArray *buttons=[self.navigationBar.items mutableCopy]; [кнопки addObject:self.visitButton]; self.navigationBar.items=кнопки; - person Live2Enjoy7; 03.12.2012
comment
Код UIBarButtonItem в порядке, но все остальное неправильно. Массив self.navigationBar.items представляет собой массив UINavigationItem, а не UIBarButtonItem. Вы хотите настроить кнопки на self.navigationItem. - person rmaddy; 03.12.2012
comment
rmaddy, я не думаю, что вы сказали правильно, потому что в собственном делегате Apple UISplitViewController они устанавливают UIBarButtonItem через -(void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc; когда мой блокнот помещается в портрет, и он работает - person Live2Enjoy7; 03.12.2012
comment
Посмотрите документы для UINavigationBar items]. Это массив UINavigationItem, а не UIBarButtonItem. Я понятия не имею, как это связано с методом UISplitViewControllerDelegate, который вы только что опубликовали. - person rmaddy; 03.12.2012
comment
Потому что в этом методе вы добавляете и удаляете barButtonItem в self.navigationBar.items, и он работает (когда iPad переворачивается). Вот почему я применил этот подход с кнопкой посещения - person Live2Enjoy7; 03.12.2012
comment
Хм? Этот код разделенного контроллера вообще не касается свойства navigationBar.items. Во всяком случае, вы играете со свойствами navigationItem.leftBarButtonItems (или подобными). Огромная разница между navigationItem и navigationBar. - person rmaddy; 03.12.2012
comment
У меня есть UIToolBar в верхней части контроллера подробного представления (с именем navigationBar), поэтому к нему добавляются кнопки. - person Live2Enjoy7; 03.12.2012
comment
Ой. Неважно. Я думал, вы говорите о стандартном свойстве navigationBar UINavigationController. Извините за путаницу. - person rmaddy; 03.12.2012