以编程方式将标题在IB中设置的UIButton的标题更改为属性

在使用之前,我已经更改了UIButton的标题:

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

但是我遇到了这样一种情况:我使用的UIButton有一个多行标题,如果在IB中从“普通”改为“属性”,只能正确地居中文本。 当标题以这种方式改变时,通常的setTitle: forState:方法不再更新button。

你如何修改UIButton属性标题?

澄清,所以你不要以为我只是犯了一个愚蠢的错误,我已经使用debugging器偷看UIButton的属性和logging输出

 - (NSString *)titleForState:(UIControlState)state 

使用后

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

设置它返回刚刚设置的值。 问题是,只要标题被设置为在IB中归属 ,它不会改变button的外观。 我的代码工作正常,只需将其更改为普通 。 但是,这不是上述链接所述的解决scheme。

归属标题是通过获取

 - (NSAttributedString *)attributedTitleForState:(UIControlState)state 

并通过设置

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

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

你有在你的视图控制器类中指定为IBOutlet的button,并且它作为接口生成器中的sockets正确连接(从新的引用出口拖动到文件的所有者,并select你的UIButton对象)? 这通常是我看到这些症状时遇到的问题。首先指定 – @property @property(non atomic,strong)IBOutlet UIButton *mybutton;

然后

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

这是一个

 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进行更改

Swift – 对于button标题中的红色删除线字体:

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

我不得不使用以下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];