You can use the default button as follows:
UIButton* button = [UIButton buttonWithType:UIButtonTypeSystem]; [button setTranslatesAutoresizingMaskIntoConstraints:NO]; [button setTitle:@"Normal" forState:UIControlStateNormal]; [button addTarget:self action:@selector(buttonTouched:) forControlEvents:UIControlEventTouchUpInside]; [button setTitle:@"Selected" forState:UIControlStateSelected]; [self.view addSubview:button]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[button]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(button)]]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[button]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(button)]];
If you use a custom button, in the simplest way I can name the UIButton subclass and add your custom UILabel inside. Here is my short code that I have in mind:
@interface CustomButton : UIButton { NSString* _normalTitle; NSString* _selectedTitle; } @property UILabel* customLabel; @end @implementation CustomButton @synthesize customLabel=_customLabel; - (instancetype)init; { self = [super init]; if ( self ) { [self setBackgroundColor:[UIColor greenColor]]; _customLabel = [UILabel new]; [_customLabel setTextColor:[UIColor whiteColor]]; [_customLabel setTranslatesAutoresizingMaskIntoConstraints:NO]; [self addSubview:_customLabel]; [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_customLabel]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_customLabel)]]; [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_customLabel]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_customLabel)]]; } return self; } - (void)setTitle:(NSString *)title forState:(UIControlState)state; { if ( state == UIControlStateNormal ) { _normalTitle = title; } else if ( state == UIControlStateSelected ) { _selectedTitle = title; } [self setSelected:[self isSelected]]; } - (void)setSelected:(BOOL)selected; { [super setSelected:selected]; if ( selected ) { [_customLabel setText:_selectedTitle]; } else { [_customLabel setText:_normalTitle]; } } @end
Peter source share