20

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

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

但是我遇到了一种情况UIButton我正在使用的标题是多行标题,并且只有在 IB 中从“普通”更改为“归属”时才会正确居中文本。以这种方式更改标题时,通常的setTitle: forState:方法不再更新按钮。

您如何更改 a 的属性标题UIButton

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

- (NSString *)titleForState:(UIControlState)state

使用后

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

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

4

5 回答 5

59

属性标题通过以下方式获得

- (NSAttributedString *)attributedTitleForState:(UIControlState)state

并通过设置

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

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

于 2012-10-02T01:04:57.273 回答
9

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

然后

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

于 2012-09-29T11:55:42.477 回答
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

于 2012-09-29T11:16:11.027 回答
1

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

let attributedStringForInvalid = NSAttributedString(string: "I'm Invalid!", attributes: [
  NSStrikethroughStyleAttributeName: true,
  NSForegroundColorAttributeName: UIColor.redColor()
  ])
myButton.setAttributedTitle(attributedStringForInvalid, forState: UIControlState.Normal)
于 2015-08-17T22:31:43.523 回答
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];
于 2015-12-07T13:14:59.320 回答