您的位置:首页 > 产品设计 > UI/UE

UISwitch 及其自定义方法

2015-12-03 22:05 555 查看
开关(UISwitch)提供了一个简单的开/关UI元素,类似于传统的物理开关,开关的可配置选项很少,应将其用于处理布尔值。我们使用其Value Changed事件来检测开关切换,并通过属性on或实例方法isOn来获取当前值。

 
 
1.UISwitch的初始化

UISwitch *switchView = [[UISwitch alloc] initWithFrame:CGRectMake(54.0f, 16.0f, 100.0f, 28.0f)];
2.设置UISwitch的初始化状态

switchView.on = YES;//设置初始为ON的一边
 3.UISwitch事件的响应

[switchView addTarget:self action:@selector(switchAction:) forControlEvents:UIControlEventValueChanged];

4.自定义
UISwitch类的单薄到我不知道该说什么了。不过,UIControl对象通常是由一系列的子视图构建的。通过导航控件的视图,可以公开的定制通常不能从标准SDK中访问的对象。这种定制依赖于对控件子视图树的理解,通过下面这样的函数可以递归遍历视图树,就可以了解每一个视图了。
- (void)explode:(id)aView level:(int)aLevel {
         for (int i = 0; i < aLevel; i++)
                   printf("-");
         printf("%s:%s/n",[[[aView class] description] UTF8String],[[[aView superclass] description] UTF8String]);
        
         for(UIView *subview in [aView subviews])
                   [self explode:subview level:(aLevel + 1)];
}
初始化级别为0,打出来的结果是:
UISwitch:UIControl
-_UISwitchSlider:UISlider
--UIImageView:UIView
--UIImageView:UIView
--UIView:UIResponder
---UILabel:UIView
---UILabel:UIView
--UIImageView:UIView
 
然后就可以开始封装自定义UISwitch字体和字体颜色的定制功能
@interface UISwitch (extended)
- (void) setAlternateColors:(BOOL) boolean;//这是文档未记录的特性,显示为橘黄色的背景。
@end
 
@interface _UISwitchSlider : UIView
@end
 
@interface UICustomSwitch : UISwitch
- (void) setLeftLabelText: (NSString *) labelText;
- (void) setRightLabelText: (NSString *) labelText;
@end
 
@implementation UICustomSwitch
- (_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];
}
- (void) setLeftLabelText: (NSString *) labelText {
         [[self leftLabel] setText:labelText];
}
- (void) setRightLabelText: (NSString *) labelText {
         [[self rightLabel] setText:labelText];
}
@end
下面是测试代码:
- (void)loadView
{
         contentView = [[[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease];
         contentView.backgroundColor = [UIColor whiteColor];
        
         UICustomSwitch *switchView = [[UICustomSwitch alloc] initWithFrame:CGRectZero];
         [switchView setCenter:CGPointMake(160.0f,170.0f)];
         [contentView addSubview:switchView];
         [switchView release];
 
         switchView = [[UICustomSwitch alloc] initWithFrame:CGRectZero];
         [switchView setCenter:CGPointMake(160.0f,200.0f)];
         [switchView setAlternateColors:YES];
         [contentView addSubview:switchView];
         [switchView release];
        
         switchView = [[UICustomSwitch alloc] initWithFrame:CGRectZero];
         [switchView setCenter:CGPointMake(160.0f,230.0f)];
         [switchView setLeftLabelText: @"YES"];
         [switchView setRightLabelText: @"NO"];
         [contentView addSubview:switchView];
         [switchView release];
        
         switchView = [[UICustomSwitch alloc] initWithFrame:CGRectZero];
         [switchView setCenter:CGPointMake(160.0f,260.0f)];
         [switchView setLeftLabelText: @"ABC"];
         [switchView setRightLabelText: @"DEF"];
         [[switchView rightLabel] setFont:[UIFont fontWithName:@"Georgia" size:16.0f]];
         [[switchView leftLabel] setFont:[UIFont fontWithName:@"Georgia" size:16.0f]];
         [[switchView leftLabel] setTextColor:[UIColor yellowColor]];
         [contentView addSubview:switchView];
         [switchView release];     
        
         self.view = contentView;
}
这样子定制后的结果老强大了(图1)。
                                                       
最后,悲催的事情还是发生了,我们选择了使用资源给出的两张图(图2),结果是我们放弃了那个平滑切换的动画把它做成了一个按钮,点一下换一张图片,记住一个状态。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios开发 应用