1

У меня есть следующее UIBarButton Пункт:UIBarButtonItem Название Изменение

UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 100.0f, 45.0f, 30.0f)]; 
    [backButton setBackgroundImage:backButtonImage forState:UIControlStateNormal]; 
    [backButton addTarget:self action:@selector(back:) forControlEvents:UIControlEventTouchDown]; 
    backButton.titleLabel.text = @"Back"; 
    backButton.titleLabel.font = [UIFont fontWithName:@"texgyreadventor-regular.otf" size:20.0f]; 
    backButton.titleLabel.textColor = [UIColor whiteColor]; 
    UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 
    _backItem = backItem; 

В каком-то другом методе, я поставил его, чтобы быть на панели навигации следующим образом:

[self.navigationItem setLeftBarButtonItem:_backItem];

До сих пор, все работает, как ожидалось. Но прямо перед тем, как добавить его в панель навигации сверху, я хотел бы изменить его текст. Вот один вещи, которые я пробовал делать:

self.navigationItem.leftBarButtonItem.title = @"NEW TITLE";

Это, однако, не работает. Как я могу добавить заголовок во время выполнения на лету?

+0

Do '[self setNeedsDisplay]' – Legolas

+0

@Legolas Для этого нужен метод 'drawRect' ... Итак, о чем вы говорите? – darksky

+0

Другим решением является то, что вы можете использовать NSMutableString по всему миру (уровень класса). Поместите «Назад» в строку и перейдите на ярлык кнопки, и перед добавлением изменения строка заменит строку «Новое название». –

ответ

-5

Вот исправление:

[button setTitle:@"Back" forState:UIControlStateNormal]; 

состояние должно быть определено.

+0

, вы должны принять ответ« Пол де Ланге », так как он дал вам этот ответ :) –

+0

Однако он не работает.То, что он делает, - это получить эту кнопку и присвоить ее кнопке, изменить заголовок и никогда не устанавливать его. Я отредактирую его ответ и отметю его как правильно. – darksky

+0

Спасибо Омару! Nayefc, вам не нужно его возвращать, я просто извлекаю указатель на кнопку и затем изменяю свойство title объекта по этому адресу. BTW: Я не знал, что вы можете принять свои собственные ответы, теперь я понимаю, почему некоторые люди могут иметь такую ​​большую репутацию без видимых причин. –

-3

Вместо

self.navigationItem.leftBarButtonItem.title = @"NEW TITLE"; 

использование

UIButton *backButton = (UIButton *)self.navigationItem.leftBarButtonItem.customView; 
backButton.titleLabel.text = @"changed"; 

UPDATE: Если вы хотите изменить название, прежде чем добавить его на навигационной панели выполните следующие действия

UIButton *backButton = (UIButton *)_backItem.customView; 
backButton.titleLabel.text = @"changed"; 
+0

Не работает. П. Вы тоже из Аммана? – darksky

+0

Это не сработает, потому что это изменит заголовок 'backButton', который не находится на навигационной панели. – darksky

+0

@Nayefc, да из amman, и что именно вы хотите изменить, из вашего вопроса кажется, что вы хотели изменить название кнопки, которую вы добавили? поясните пожалуйста –

6

Вы снова можете получить доступ к кнопке, используя:

UIView* view = self.navigationItem.leftBarButtonItem.customView; 
UIButton* button = (UIButton*)view; 
[button setTitle: @"NEW TITLE" forState: UIControlStateNormal]; 

Вы начинаете IOS Nayefc, я вижу, у вас есть много вопросов, в эти последние несколько дней :)

2

Для тех, кто ищет (как я сейчас), в новых версиях iOS принятый ответ больше не работает. Он стал barButton.title, который является read-write String? (в Swift) или NSString (в Obj-C).

Смежные вопросы