RxSwift学习

UISwitch的使用(RAC中)

2017-09-01  本文已影响689人  小胖子2号

一、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;

上一篇 下一篇

猜你喜欢

热点阅读