美文网首页RxSwift学习
UISwitch的使用(RAC中)

UISwitch的使用(RAC中)

作者: 小胖子2号 | 来源:发表于2017-09-01 14:13 被阅读689次

    一、UISwithch的简单实用

    其实主要就是控制switch的开关


    1.png

    第一种:点击开关会改变状态

    1.在cell里进行拖线后

    @property (weak, nonatomic) IBOutlet UISwitch *XJPSwitch;
    

    备注:监听switch开关的状态的方法

    RAC有提供一个方法,当UISwitch 状态发生改变的时候 会触发这个方法,所以要订阅这个开关状态改变的信号

     XJPTableViewCellStyleValue2 *cell = [tableView dequeueReusableCellWithIdentifier:@"XJPTableViewCellStyleValue2"];
    
     [[cell.XJPSwitch rac_newOnChannel] subscribeNext:^(id value) {
                NSLog(@"--------------%@",value);  // value就是开关的值
                BOOL flag = [value boolValue];
    

    2. 使用场景

    场景:当这个开关改变时,另一个界面的按钮根据开关的状态隐藏或显示(关,按钮隐藏; 开,按钮打开)

    1. 控制UISwitch控件的初始状态
     if ([XJPUserNameModel shardUserModel].SwitchValue) {
                [cell.XJPSwitch setOn:YES];
            } else {
                [cell.XJPSwitch setOn:NO];
            }
    
    1. 保存按钮开关状态
      数据的持久化存储,因在项目中方便,此处随着项目中的其他数据,直接采用了归档方式,其实采用NSUserDefault更好。关于数据持久化存储的选择方式可参考jianshu

    代码如下:

            [[cell.XJPSwitch rac_newOnChannel] subscribeNext:^(id value) {
                NSLog(@"--------------%@",value);
                BOOL flag = [value boolValue];
    
                [XJPUserNameModel shardUserModel].SwitchValue = flag;
                [XJPUserNameModel saveDataToKeyChian];
                //  NSLog(@"-------22222222---%@",[XJPUserNameModel shardUserModel].SwitchValue);
                    
            }];
            return cell;
    
    

    第二种:点击开关,不会改变状态,只有验证通过后,才会改变状态

    1.同上,但会增加监听点击的方法,控制按钮被点击后状态不变

    -(void)awakeFromNib
    {
        [super awakeFromNib];
        
        [self.XJPSwitch addTarget:self action:@selector(switchClick:) forControlEvents:UIControlEventTouchUpInside];
        self.selectionStyle = UITableViewCellSelectionStyleNone;
        self.textLabel.font = [UIFont systemFontOfSize:14];
        self.textLabel.textColor = [UIColor colorWithHexString:@"333333"];
        
    }
    
    - (void)switchClick:(UISwitch * )sender {
        [sender setOn: !sender.isOn];
    }
    
    

    2.使用场景:验证成功后才会打开或则关闭

    1. 控制UISwitch控件 的初始状态;
      2.当UISwitch 状态发生改变的时候, 订阅这个开关状态改变的信号
      3.监听值的改变,确定开关的状态
        XJPTableViewCellStyleValue21 *cell = [tableView dequeueReusableCellWithIdentifier:@"XJPTableViewCellStyleValue21"];
        
        //1.控制UISwitch控件 的初始状态;
        if ([[XJPUserNameModel shardUserModel].isopenfree isEqualToString:@"00"]) { // 未开通
            [cell.XJPSwitch setOn:NO];
        }
        else  if ([[XJPUserNameModel shardUserModel].isopenfree isEqualToString:@"01"])  // 已开通
        {
            [cell.XJPSwitch setOn:YES];
        }
        NSLog(@"小额免密:%@",[XJPUserNameModel shardUserModel].isopenfree);
        @weakify(self)
    
         //2.开关被点击,触发这个方法;
        [[cell.XJPSwitch rac_newOnChannel] subscribeNext:^(id x) {
            @strongify(self)
            [self.viewModel.nextCommand execute:nil];
        }];
        
         //3.监听值的改变 ,设置开关的状态
        [RACObserve([XJPUserNameModel shardUserModel], isopenfree) subscribeNext:^(id  _Nullable x) {
            if ([x isEqualToString:@"00"]) { // 未开通
                [cell.XJPSwitch setOn:NO];
            }
            else  if ([x isEqualToString:@"01"])  // 已开通
            {
                [cell.XJPSwitch setOn:YES];
            }
        }];
        return cell;
    
    

    相关文章

      网友评论

        本文标题:UISwitch的使用(RAC中)

        本文链接:https://www.haomeiwen.com/subject/dymhjxtx.html