IOS复习UISlider和UISwitch

 
开头就不写了,和前面一样,新建项目UISlider&UISwitchStudy

 
本次实现的UISlider和UISwitch控件用代码实现的一些简单功能,拖动slider 在label上显示slider的值,当slider值大于90的时候,弹出一个警告;switch在变换开关的时候,实现隐藏事件:
 
首先在ViewController.h文件中定义三个控件对象,因为需要使用到Alert的委托方法,添加UIAlertViewDelegate协议,代码如下
 
@interface chenViewController : UIViewController<UIAlertViewDelegate>
 
{
 
    UISlider *slider;
 
    UILabel *sliderLabel;
 
    UISwitch *switchTest;
 
}
下面就不详细写了,代码如下,都有详细注释,下次有需要补充再补充
- (void)viewDidLoad
{
    [superviewDidLoad];
    
    CGRect frame = CGRectMake(10, 50, 200, 0);
    //slider高度被忽略,所以设置为0
    slider=[[UISlider alloc] initWithFrame:frame];
    //slider系统默认取值范围是0.0--1.0之间,可以通过mininumValue和maxinumValue两个属性设置
    slider.minimumValue=0.0;
    slider.maximumValue = 100.0;
    //设置滑块左边值颜色为绿色。系统默认为蓝色
    slider.minimumTrackTintColor = [UIColorgreenColor];
    //设置滑块右边值为红色,系统默认为白色
    slider.maximumTrackTintColor = [UIColorredColor];
    //给slider是指默认值30
    slider.value = 30;
    //continuous属性,是指滑块值在拖地触发滑块值变动
    slider.continuous = YES;
    [slideraddTarget:selfaction:@selector(sliderValueChanged:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:slider];
    //实例label
    sliderLabel=[[UILabelalloc]initWithFrame:CGRectMake(200, 200, 80, 45)];
    [self.viewaddSubview:sliderLabel];
    
    //Switch控件,
    CGRect switchFrame = CGRectMake(100, 200, 0, 0);
    //初始化
    switchTest = [[UISwitch alloc] initWithFrame:switchFrame];
    //设置switch初始状态为ON
    switchTest.on = YES;
    //添加一个触发事件,当点击时候,触发这个事件
    [switchTestaddTarget:selfaction:@selector(switchValueChanged:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:switchTest];
}
//触发事件是弹出一个警告,当滑块值大于90的时候,这个事件才被触发,想在此处提的一点是Alert多个按钮时,怎样去调用其他事件的发生,此处就用到了Alert的委托方法;
-(void)sliderValueChanged:(id)sender
{
    UISlider *sliderValueChange = (UISlider *)sender;//做一个类型装换
    if (sliderValueChange==slider) {
        float value = sliderValueChange.value;
        slider.value =value;
        NSLog(@"%f",value);
        sliderLabel.text = [NSString stringWithFormat:@"%.2f",slider.value];
        NSLog(@"------%@",sliderLabel.text);
        //当slider滑条值大于90的时候,弹出警告
        if (sliderValueChange.value>=90) {
            UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"警告" message:@"滑动条值高达90了" delegate:self cancelButtonTitle:@"知道了" otherButtonTitles:@"返回初始位置", nil];
            [alert show];
        }
    }
}
//Alert的委托方法,用buttonIndex按钮索引值代表按钮,处理按钮事件
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex==0) {
        NSLog(@"知道了");
    }
    elseif (buttonIndex==1){//点击了返回初始位置按钮事,重新h设置按钮的值未初始化时候的值
        slider.value=30;
        //将slider值转换成字符串赋给text
        sliderLabel.text=[NSString stringWithFormat:@"%.2f",slider.value];
    }
}
//触发事件的方法,可以在里面添加其他代码
-(void)switchValueChanged:(id)sender
{
    if (switchTest.on == YES)
    {
//        switchTest.hidden=YES;//隐藏
        NSLog(@"开");
    }
    else {
        //switchTest.on = YES;
        NSLog(@"关");
    }
    
}

下面是来源于互联网

本想着设置switch的标题,但是网上的在网上看人家博客的方法是改写 UISwitch.h和.m里的文件,UICUstomSwitch.h和.m继承UISwitch方法,别人有写写好的文件可以直接添加到工程之中,但是在ViewDidLoad中去不能访问UICustomSwitch里面的方法,不知道什么原因,SSDViewContoller中也加入了 UICUstomSwitch.h头文件,可还是提示没有他里面的方法错误信息:
 
    No visible @interface for 'UISwitch' declares the selector 'setLeftLabelText:font:color:'
 
        这种方法参考的:http://www.flyblog.info/catprogramming/258.html
 
        还查出一种方法是
 
        ((UILabel *)[[[[[[switchTest subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:0]).text = @"Foo";
 
        ((UILabel *)[[[[[[switchTest subviews] lastObject] subviews] objectAtIndex:2] subviews] objectAtIndex:1]).text = @"Bar";
 
        但是运行就出现类存问题,数组越界什么的;运行错误;
 
        这种方法参考的:http://www.cnblogs.com/xingchen/archive/2011/11/07/2240225.html
 
        如果有懂的大哥大姐们还望你们给予指点;
 
原文转载:http://blog.csdn.net/banyingli/article/details/6167561
 
 
 
 
#pragma mark -test
#pragma mark test
这两行是注释,方便查找,夹在方法前面,。。
 
今天就写到这儿了,
          2013年8月7日,11:48,东南大学无锡分校桃园3宿舍106室
 
 
 
补充
这是拖拽空间实现的
这是输出口和事件
@property (weak, nonatomic) IBOutletUILabel *sliderLabel;
- (IBAction)sliderChanged:(id)sender;
这是事件实现
 
- (IBAction)sliderChanged:(id)sender {
 
    //首先将sender装换承UISlider,作用是让代码可读性变强,
 
    //并避免每次使用sender都对他进行其它类型转换。
 
    UISlider *slider = (UISlider *)sender;
 
    //接收滑块的值,将其加0.5,以便四舍五入为整型值。
 
    int progresAsInt = (int)(slider.value +0.5f);
 
    //必须转换为string  时间上一个项目里面有
 
    self.sliderLabel.text =[[NSString alloc] initWithFormat:@"%d",progresAsInt];
 
}
然后就ok
 
 
补充另外一点
//    两端添加图片
//    滑块可以在任何一段显示图像。添加图像后会导致滑动条缩短,所以记得要记得在创建的时候增加滑块的宽度来适应图像。
//    [ mySlider setMininumTrackImage: [ UIImage applicationImageNamed:@"min.png" ] forState: UIControlStateNormal ];
//    [ mySlider setMaxinumTrackImage: [ UIImage applicationImageNamed:@"max.png" ] forState: UIControlStateNormal ];
//    你可以根据滑块的各种不同状态显示不同的图像。下面是可用状态:
//    UIControlStateNormal
//    UIControlStateHighlighted
//    UIControlStateDisabled
//    UIControlStateDisabled
//    UIControlStateSelected
    //continuous属性,是指滑块值在拖地触发滑块值变动
    mySlider.continuous = YES;
    //滑块值改变时收到通知
    [mySlider addTarget:selfaction:@selector(sliderValueChanged:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:mySlider];
    //[self.navigationItem.titleView addSubview:myslider ];//添加到导航栏
}
 
这句代码需要思考一下转换字符串的方式
//只要滑块停放(注意是停放,如果要在拖动中也触发,请看后文)到新的位置,你的动作方法就会被调用:
- (void) sliderValueChanged:(id)sender{
    UISlider *control=(UISlider *)sender;
    if (control==self.mySlider) {
        //float value=control.value;//读取控件值
        self.sliderLabel.text=[NSString stringWithFormat:@"%0.2f",self.mySlider.value];
    }
}
 
 
//如果要在拖动中也触发,需要设置滑块的 continuos 属性:
//mySlider.continuous = YES ;
//这个通知最简单的一个实例就是实时显示滑块的值,很奇怪的苹果显示滑块的值是一个私有的API(setShowValue),私有就私有,大不了我不用就是。我们可以用一个UILabel来显示值,在每次触发上面的方法时改变label的值,不就可以实时显示了吗?当然我们可以做的不仅仅是这个,还有更多的 cool 事情可以去实现,就看你的手段与想象力了。

原文地址:https://www.cnblogs.com/ioschen/p/3248852.html