zoukankan      html  css  js  c++  java
  • 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 事情可以去实现,就看你的手段与想象力了。

  • 相关阅读:
    linux下小知识点积累
    马斯洛需求层次理论
    tar命令的小经验
    shell 和c语言的区别
    使用vue实现的品牌列表简单小例子
    vue的基本代码以及常见指令
    MVC和MVVM
    CSS3幽灵
    Web版App,原生App,混合App的区别以及优缺点
    常见的sql操作
  • 原文地址:https://www.cnblogs.com/ioschen/p/3248852.html
Copyright © 2011-2022 走看看