以编程方式更改UIButton的标题,其标题在IB中设置为归属

时间:2012-09-29 11:10:25

标签: ios uibutton interface-builder

我在使用之前更改了UIButton s的标题:

- (void)setTitle:(NSString *)title forState:(UIControlState)state

I've run into a situation我使用的UIButton有一个多行标题,只有在IB中从“普通”更改为“归属”时才会正确居中。以这种方式更改标题时,通常的setTitle: forState:方法不再更新按钮。

如何更改UIButton归因标题?

为了澄清,所以你不要假设我只是犯了一个愚蠢的错误,我使用调试器来查看UIButton的属性并记录

的输出
- (NSString *)titleForState:(UIControlState)state

使用后

- (void)setTitle:(NSString *)title forState:(UIControlState)state

设置它返回刚刚设置的值。问题是只要标题在IB中设置为归属,它就不会改变按钮的外观。只需将其更改为 plain ,我的代码就可以正常工作。但这不是上面链接中描述的解决方案。

5 个答案:

答案 0 :(得分:58)

归属头衔通过

获得
- (NSAttributedString *)attributedTitleForState:(UIControlState)state

并通过

设置
- (void)setAttributedTitle:(NSAttributedString *)title forState:(UIControlState)state

格式化NSAttributedString对象有点复杂,但将其设置为nil将清除标题,这就是我需要的内容。

答案 1 :(得分:9)

您是否在视图控制器类中将按钮指定为IBOutlet,并且它是否正确连接为Interface Builder中的插座(从新引用插座拖动到文件所有者并选择您的UIButton对象)?当我看到这些症状时,这通常是我遇到的问题 .specify first - @property(non atomic,strong)IBOutlet UIButton *mybutton;

然后

[myButton setTitle: @"myTitle" forState: UIControlStateNormal];

答案 2 :(得分:4)

这是一个

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

中进行更改

答案 3 :(得分:1)

Swift - 对于按钮标题中的红色删除线字体:

let attributedStringForInvalid = NSAttributedString(string: "I'm Invalid!", attributes: [
  NSStrikethroughStyleAttributeName: true,
  NSForegroundColorAttributeName: UIColor.redColor()
  ])
myButton.setAttributedTitle(attributedStringForInvalid, forState: UIControlState.Normal)

答案 4 :(得分:1)

我必须使用以下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];