2014-09-13 4 views
8

Я хочу программным образом изменить заголовок UIButton, который имеет присвоенный заголовок. Кнопка создана в IB. Я не хочу изменять атрибуты только заголовком/текстом.Программно изменить присвоенное название UIButton

Я пробовал код ниже, но не могу найти способ изменить заголовок NSAttributedString.

NSAttributedString *attributedString = [self.deleteButton attributedTitleForState:UIControlStateNormal]; 

// How can I change title of attributedString without changing the attributes? 

[self.deleteButton setAttributedTitle:attributedString forState:UIControlStateNormal]; 

Спасибо!

ответ

15

Частично у вас есть ответ.

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithAttributedString:[_ deleteButton attributedTitleForState:UIControlStateNormal]]; 

[attributedString replaceCharactersInRange:NSMakeRange(0, attributedString.length) withString:@"Your new string"]; 

[_ deleteButton setAttributedTitle:attributedString forState:UIControlStateNormal]; 

Вместо создания NSAttributedString создания NSMutableAttributedString, то вы можете просто задать строку, как это.

2

Это действительно зависит от вашего attributedString:

  • «просто» attributedString: Это означает, что ваш attrString имеет только один набор атрибутов, которые применяются ко всей длине строки. В этом случае, вы можете сделать следующее:

    NSAttributedString *attrString = WHATEVER; 
    NSDictionary *attributes = [attrString attributesAtIndex:0 effectiveRange:NULL]; 
    NSAttributedString *newAttrString = [[NSAttributedString alloc] initWithString:WHATEVER 
                        attributes:attributes]; 
    
  • вашего attributedString имеет различные диапазоны атрибутов:
    Это может получить очень сложные в зависимости от структуры вы attributedString, потому что вы должны сделать много диапазона обработка и т. д. В этом случае вам лучше создать новый NSMutableAttributedString и установить атрибуты с нуля.

4

Swift 3 Ответ:

if let attributedTitle = yourButton.attributedTitle(for: .normal) { 
    let mutableAttributedTitle = NSMutableAttributedString(attributedString: attributedTitle) 
    mutableAttributedTitle.replaceCharacters(in: NSMakeRange(0, mutableAttributedTitle.length), with: "New title") 
    yourButton.setAttributedTitle(mutableAttributedTitle, for: .normal) 
} 
Смежные вопросы