Как программно изменить текст 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)°"
}