UIButton title disappears

2020-04-16 17:17发布

问题:

I have a ViewController with an UIButton inside. When I clicked, the text on the button disappeared. I add all the setTitle for all states, but it continues disappearing. Any idea?

This is a part of my code:

@interface AddCardViewController : UITableViewController <UITextFieldDelegate>{
UIButton *commit;
    ......

@implementation AddCardViewController

- (void)viewDidLoad{

    self.commit = [UIButton buttonWithType: UIButtonTypeCustom];

    [self setCommitProperties];

    [self.view addSubview:commit];

 .........}



- (void) setCommitProperties{

   CGRect frameTable = self.tableView.frame;

   CGRect frame = CGRectMake(frameTable.origin.x + 10, 140, frameTable.size.width - 20, 40);

   commit.frame = frame;

   [commit setBackgroundColor : [UIColor whiteColor]];

   [commit setTitle: NSLocalizedString(@"AddCard",@"") forState: UIControlStateNormal];
   [commit setTitle: NSLocalizedString(@"AddCard",@"") forState: UIControlStateSelected];
   [commit setTitle: NSLocalizedString(@"AddCard",@"") forState: UIControlStateHighlighted];
   [commit setTitle: NSLocalizedString(@"AddCard",@"") forState: UIControlStateApplication];
   [commit setTitle: NSLocalizedString(@"AddCard",@"") forState: UIControlStateReserved];
   [commit setTitle: NSLocalizedString(@"AddCard",@"") forState: UIControlStateDisabled];

    [commit addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchDown];    

   UIColor *color = [[[PersonalizationManager alloc] init] getColor: @"AddCardViewController" :@"Commit_Title"]; 

   [commit.titleLabel setTextColor: color];

   color = [[[PersonalizationManager alloc] init] getColor: @"AddCardViewController" :@"Commit_Border"];

   [commit.layer setBorderColor:[color CGColor]];    
   [commit.layer setBorderWidth : 0.5f];
   [commit.layer setCornerRadius : 10.0f];
}

回答1:

Well it's hard to say for sure, but is the text not visible because the color is the same? I see you set the text for all states but you may want to set the color for all states as well.

[commit setTextColor:[UIColor redColor] forState:UIControlStateSelected];


回答2:

With attributed text, make sure button Type = Custom (not System) in your storboard/xib.



回答3:

I noticed a peculiar thing. If I set the title using

  bttn.titleLabel.textColor = [UIColor purpleColor];

Then as soon as I click the button, the title disappears. But, if I use the following method :

[bttn setTitleColor:[UIColor purpleColor] forState:UIControlStateNormal];

Then everything is working correctly.



回答4:

I guess you need to use [self.commit setTitle: NSLocal..., actually use self.commit overall for assignments (when you use @property (nonatomic, retain) or strong with ARC). I use @synthesize commit = _commit; and then only _commit for all the rest of the module.



回答5:

As Jack says, it's the "selected" state of the button that has got the same color of the background. You can change that color also in the Storyboard:

  • select the button
  • in Attributes Inspector -> State Config -> select "highlighted"
  • select the correct "text color"