Как программно изменить текст UIBarButtonItem?

Я прочитал эту статью: Программно изменить текст UILabel (UIBarButtonItem) на панели инструментов

Но, похоже, для моей панели автоматического скрытия не работает?
Я также попытался barbuttonItem.title установить текст, тоже не удалось.

Любая идея?

Ответ 1

Создаете ли вы кнопку в Interface Builder? Убедитесь, что для идентификатора установлено значение "Пользовательский", иначе вы не сможете изменить заголовок.

Выберите UIBarButtonItem в Interface Builder, откройте инспектор (Command + Shift + I) и выберите "Пользовательский" в раскрывающемся списке рядом с Identifier.

Ответ 2

Попробуйте следующее:

UIBarButtonItem *clearButton = [[UIBarButtonItem alloc] initWithTitle:@"Clear" style:UIBarButtonItemStyleBordered target:self action:@selector(yourMethod:)];

Ответ 3

  • Создайте IBOutlet для UIBarButtonItem, outToMyButton в этом примере
  • синтезируется в .m
  • outToMyButton.title = [NSString stringWithFormat:@"%i",myInt]; // or any NSString init

Ответ 4

Изменение названия UIBarButtonItem Программно

@interface YourController : UIViewController {

    UIBarButtonItem *barButton;

}

- (void)viewDidLoad
{
barButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Set", @"Set")
                                                           style:UIBarButtonItemStylePlain
                                                            target:self
                                                            action:@selector(barButtonClicked)];
}   

В BarButtonItem Действие

-(void)barButtonClicked{

if ([barButton.title isEqualToString:@"Set"]) {

  //Enter Code

  barButton.title = @"Done"


 }else{
   //Enter Code
  barButton.title = @"Set"

    }

}

Ответ 5

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

Я, однако, не смог изменить текст UILabel, добавленный в UIBarButtonItem, который является частью inputAccessoryView, отображаемого над многокомпонентным скользящим UIPickerView для каждого из нескольких входов UITextFields. Эти элементы создаются программно (Xcode v 4.3 (4E109) ​​), за исключением текстовых полей, каждая из которых создана в Раскадровка и объявлена ​​как свойство.

Не назначая текст на ярлык на панели инструментов, а затем назначьте/запустив элемент кнопки панели с помощью панели инструментовTitle в качестве пользовательского представления:

toolbarTitle.text = @"myTextFromPickerComponent";
UIBarButtonItem *title = [[UIBarButtonItem alloc] initWithCustomView:toolbarTitle];

//nor alloc/init-ing the bar button item directly, passing the new text to initWithTitle:

UIBarButtonItem *title = [[UIBarButtonItem alloc] initWithTitle:toolbarTitle.text style:UIBarButtonItemStyleDone target:self action:nil];

Дала желаемое поведение; т.е. текст ярлыка не изменился, хотя я подтвердил NSLog, что я действительно отправлял новый текст.

Я получил подсказку из Документов в разделе Custom Views for Data Input, Input Views and InputAccessory Views:

"Первый ответчик может перезагрузить входные и вспомогательные виды, вызвав метод reloadInputViews UIResponder."

Я реализовал это, получив текущий вызов UITextField reloadInputViews, и это сработало для меня с одним из двух фрагментов кода, указанных выше.

Ответ 6

Вопрос заключался в программном изменении текста UIBarButtonItem:

Итак, вот как вы это делаете. Примером будет размещение информации о погоде в баре.

import UIKit
...

@IBOutlet weak var weatherBarLabel: UIBarButtonItem!


//then
func setTheWeatherInfo(weather: WeatherModel){
 weatherBarLabel.title = "\(weather.temperature)°"
}