iphone编程之改变UISWitch文本和颜色

代码下载地址:UICustomSwitch.rar

 iPhone SDK中的Switch控件默认的文本为 ON OFF两种,不同的语言显示不同, 颜色均为蓝色和亮灰色,如图

 
如果想改变ON,OFF文本,我们必须重从UISwitch继承一个新类, 然后在新的Switch类中修改替换原有的Views, 申明代码如下
 
UICustomSwitch.h
 
//
//  UICustomSwitch.h
//  UICatalog
//
//  Created by aish on 09-2-25.
//  Copyright 2009  .. All rights reserved.
//
 
#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
代码中添加了一个名为extended的category,主要作用是申明一下UISwitch的 setAlternateColors消息,否则在使用的时候会出现找不到该消息的警告。其实setAlternateColors已经在UISwitch中实现,只是没有在头文件中公开而已, 所以在此只是做一个申明。当调用setAlternateColors:YES 时, UISwitch的状态为“on”时会显示为橙色,否则为亮蓝色
 
下面是实现部分的代码
 
UICustomSwitch.m
 
//
//  UICustomSwitch.m
//  UICatalog
//
//  Created by aish on 09-2-25.
//  Copyright 2009.. All rights reserved.
//
 
#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.image = 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.image = nil;
        rightImage.frame = CGRectMake(0.0f, 0.0f, 0.0f, 0.0f);
 
        //
        [rightImage addSubview: [[self createLabelWithText:labelText
                                                      font:labelFont
                                                     color:labelColor] autorelease]];   
    }
}
 
@end
实现的过程就是替换原有的标签view 以及slider。
 
使用也很简单,设置一下左右文本以及颜色即可,比如
 
switchCtl = [[UICustomSwitch alloc] initWithFrame:frame];
 
//[switchCtl setAlternateColors:YES];
[switchCtl setLeftLabelText:@"Yes"
                            font:[UIFont boldSystemFontOfSize: 17.0f]
                           color:[UIColor whiteColor]];
    [switchCtl setRightLabelText:@"No"
                             font:[UIFont boldSystemFontOfSize: 17.0f]
                            color:[UIColor grayColor]];
上面的代码将显示Yes,No两个选项,如图

 

 

 

转载于:https://www.cnblogs.com/jackyyang7/articles/2776549.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值