How can I set a button background color on iPhone?

后端 未结 18 2044
予麋鹿
予麋鹿 2020-11-30 20:22

How can I set a custom background color of a button?

Interface Builder doesn\'t seem to have an interface to do this.

Is it only available programmatically

18条回答
  •  谎友^
    谎友^ (楼主)
    2020-11-30 21:05

    Here's a variation on @user200212's solution (http://stackoverflow.com/a/8547424). It uses the UIBezierCurve class to fill the button and draw a 1px black border around it:

    UIButton+ColoredBackground.h

    //  UIButton+ColoredBackground.h
    
    #import 
    
    @interface UIButton (ColoredBackground)
    
    - (void)setBackgroundColor:(UIColor *)backgroundColor forState:(UIControlState)state;
    + (UIColor *) silverColor;
    
    @end
    

    UIButton+ColoredBackground.m

    //  UIButton+ColoredBackground.m
    #import "UIButton+ColoredBackground.h"
    #import 
    
    @implementation UIButton (UIButton_ColoredBackground)
    
    - (void)setBackgroundColor:(UIColor *)backgroundColor forState:(UIControlState)state{
    
        CGSize gcSize = self.bounds.size;
        UIGraphicsBeginImageContext(gcSize);
    
        // Create a Bezier Path around the button, and fill it with the background color
        UIBezierPath *outsideEdge = [UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:8.0f];
        [backgroundColor setFill];
        [[UIColor blackColor] setStroke];
        outsideEdge.lineWidth = 1.0;
        [outsideEdge fill];
        [outsideEdge stroke];
    
        // Create the background image
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();    
    
        UIGraphicsEndImageContext(); 
    
        // Set image as button's background image for the given state
        [self setBackgroundImage:image forState:state];
    
        // Ensure rounded button
        self.clipsToBounds = YES;
        self.layer.cornerRadius = 8.0;
    }
    
    @end
    

    Usage:

    [myButton setBackgroundImageByColor:[UIColor greenColor] forState:UIControlStateNormal];
    

提交回复
热议问题