Programmatically change title of UIButton whose title was set in IB as attributed

后端 未结 5 1017
时光说笑
时光说笑 2021-01-01 13:52

I have changed titles of UIButtons before using:

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

But I\'ve r

相关标签:
5条回答
  • 2021-01-01 14:29

    I had to use the following 4 lines to get the attributed font to display. In IB the title is set to plain and not attributed.

    // 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];
    
    0 讨论(0)
  • 2021-01-01 14:34

    Swift - For a red strikethrough font in a button title:

    let attributedStringForInvalid = NSAttributedString(string: "I'm Invalid!", attributes: [
      NSStrikethroughStyleAttributeName: true,
      NSForegroundColorAttributeName: UIColor.redColor()
      ])
    myButton.setAttributedTitle(attributedStringForInvalid, forState: UIControlState.Normal)
    
    0 讨论(0)
  • 2021-01-01 14:40

    Do you have the button specified as an IBOutlet in your view controller class, and is it connected properly as an outlet in Interface Builder (ctrl drag from new referencing outlet to file owner and select your UIButton object)? That's usually the problem I have when I see these symptoms .specify first - @property(non atomic,strong)IBOutlet UIButton *mybutton;

    then

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

    0 讨论(0)
  • 2021-01-01 14:41

    here's one

    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];
    

    no need to make changes in- (void)setTitle:(NSString *)title

    0 讨论(0)
  • 2021-01-01 14:46

    Attributed titles are obtained via

    - (NSAttributedString *)attributedTitleForState:(UIControlState)state
    

    and set via

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

    Formatting the NSAttributedString object is a bit complicated, but setting it to nil will clear the title and that's what I needed.

    0 讨论(0)
提交回复
热议问题