Программно изменить название UIButton, название которого было установлено в IB, как указано
Я изменил названия UIButton
перед использованием:
- (void)setTitle:(NSString *)title forState:(UIControlState)state
Но Я столкнулся с ситуацией, где UIButton
, который я использую, имеет многострочный заголовок и будет только правильно центрировать текст, если его изменить "простой", "отнесенный" в IB. Когда заголовок изменяется таким образом, обычный setTitle: forState:
метод больше не обновляет кнопку.
Как вы вносите изменения в присваиваемый заголовок UIButton
?
Чтобы уточнить, так что вы не предполагаете, что я просто делаю глупую ошибку, я использовал отладчик, чтобы заглянуть в свойства UIButton
и зарегистрировать вывод
- (NSString *)titleForState:(UIControlState)state
после использования
- (void)setTitle:(NSString *)title forState:(UIControlState)state
чтобы установить его, возвращается только что установленное значение. Проблема заключается в том, что она не изменяет внешний вид кнопки до тех пор, пока заголовок будет установлен в присваивается в IB. Мой код работает нормально, просто изменив его на plain. Но это не решение, как описано в ссылке выше.
Ответы
Ответ 1
Атрибутные заголовки получаются с помощью
- (NSAttributedString *)attributedTitleForState:(UIControlState)state
и установить через
- (void)setAttributedTitle:(NSAttributedString *)title forState:(UIControlState)state
Форматирование объекта NSAttributedString
немного сложнее, но установка его на nil
очистит заголовок и то, что мне нужно.
Ответ 2
У вас есть кнопка, указанная как IBOutlet в вашем классе контроллера вида, и правильно ли она подключена в качестве выходного устройства в Interface Builder (ctrl перетащить из новой ссылки для доступа к владельцу файла и выбрать свой объект UIButton)? Обычно это проблема, когда я вижу эти симптомы
. Сначала укажите -
@property(non atomic,strong)IBOutlet UIButton *mybutton;
затем
[myButton setTitle: @"myTitle" forState: UIControlStateNormal];
Ответ 3
здесь один
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self
action:@selector(aMethod:)
forControlEvents:UIControlEventTouchDown];
[button setTitle:@"Title" forState:UIControlStateNormal];
button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
[view addSubview:button];
нет необходимости вносить изменения в - (void)setTitle:(NSString *)title
Ответ 4
Swift - для красного зачеркивающего шрифта в заголовке кнопки:
let attributedStringForInvalid = NSAttributedString(string: "I'm Invalid!", attributes: [
NSStrikethroughStyleAttributeName: true,
NSForegroundColorAttributeName: UIColor.redColor()
])
myButton.setAttributedTitle(attributedStringForInvalid, forState: UIControlState.Normal)
Ответ 5
Мне пришлось использовать следующие 4 строки, чтобы отобразить атрибутный шрифт.
В IB заголовок устанавливается равным и не присваивается.
// Get the library font
UIFont *termsFont = [MTHGAppearanceController defaultFontOfSize:[MTHGAppearanceController defaultButtonFontSizeForDevice]];
// Set the font attributes required, using our librarby function for setting the colour
NSDictionary *fontAttributes = @{NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle),NSBackgroundColorAttributeName: [UIColor clearColor], NSFontAttributeName: termsFont, NSForegroundColorAttributeName:[UIColor mthg_color255WithRed:128.0f green:128.0f blue:128.0f alpha:1.0f]};
// Configure the text we want displayed using the font set above
NSAttributedString *termsString = [[NSAttributedString alloc]initWithString:@"Terms" attributes:fontAttributes];
// Now finally display the text in the required font
[self.termsButtonOutlet setAttributedTitle:termsString forState:UIControlStateNormal];