IOS 自定义UISwitch



#import <UIKit/UIKit.h>


// 该方法时SDK文档中没有的, 添加一个category

@interface UISwitch (extended)

- (void) setAlternateColors:(BOOL) boolean;

@end

// 自定义Slider 类

@interface _UISwitchSlider : UIView

@end



@interface UICustomSwitch : UISwitch {


}

- (void) setLeftLabelText:(NSString *)labelText

                     font:(UIFont*)labelFont

                    color: (UIColor *)labelColor;

- (void) setRightLabelText:(NSString *)labelText

                      font:(UIFont*)labelFont

                     color:(UIColor *)labelColor;

- (UILabel*) createLabelWithText:(NSString*)labelText

                            font:(UIFont*)labelFont

                           color:(UIColor*)labelColor;


@end




#import "UICustomSwitch.h"




@implementation UICustomSwitch



- (id)initWithFrame:(CGRect)frame {

    if (self = [super initWithFrame:frame]) {

        // Initialization code

    }

    return self;

}



- (void)drawRect:(CGRect)rect {

    // Drawing code

}



- (void)dealloc {

    [super dealloc];

}


- (_UISwitchSlider *) slider {

    return [[self subviews] lastObject];

}

- (UIView *) textHolder {

    return [[[self slider] subviews] objectAtIndex:2];

}

- (UILabel *) leftLabel {

    return [[[self textHolder] subviews] objectAtIndex:0];

}

- (UILabel *) rightLabel {

    return [[[self textHolder] subviews] objectAtIndex:1];

}


// 创建文本标签

- (UILabel*) createLabelWithText:(NSString*)labelText

                            font:(UIFont*)labelFont

                           color:(UIColor*)labelColor

{

    CGRect rect = CGRectMake(-25.0f, -10.0f, 50.0f, 20.0f);

    UILabel *label = [[UILabel alloc] initWithFrame: rect];

    label.text = labelText;

    label.font = labelFont;

    label.textColor = labelColor;

    label.textAlignment = UITextAlignmentCenter;

    label.backgroundColor = [UIColor clearColor];

    return label;

}


// 重新设定左边的文本标签

- (void) setLeftLabelText:(NSString *)labelText

                     font:(UIFont*)labelFont

                    color:(UIColor *)labelColor

{

    @try {

        //

        [[self leftLabel] setText:labelText];

        [[self leftLabel] setFont:labelFont];

        [[self leftLabel] setTextColor:labelColor];

    } @catch (NSException *ex) {

        // 

        UIImageView* leftImage = (UIImageView*)[self leftLabel];

        leftImage.p_w_picpath = nil;

        leftImage.frame = CGRectMake(0.0f, 0.0f, 0.0f, 0.0f);

        //

        [leftImage addSubview: [[self createLabelWithText:labelText

                                                     font:labelFont

                                                    color:labelColor] autorelease]];

    }

}


// 重新设定右边的文本

- (void) setRightLabelText:(NSString *)labelText font:(UIFont*)labelFont color:(UIColor *)labelColor {

    @try {

        // 

        [[self rightLabel] setText:labelText];

        [[self rightLabel] setFont:labelFont];

        [[self rightLabel] setTextColor:labelColor];

    } @catch (NSException *ex) {

        // 

        UIImageView* rightImage = (UIImageView*)[self rightLabel];

        rightImage.p_w_picpath = nil;

        rightImage.frame = CGRectMake(0.0f, 0.0f, 0.0f, 0.0f);

        //

        [rightImage addSubview: [[self createLabelWithText:labelText

                                                      font:labelFont

                                                     color:labelColor] autorelease]];   

    }

}


@end