Подтвердить что ты не робот

Программно изменить название 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. Но это не решение, как описано в ссылке выше.

4b9b3361

Ответ 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];