一、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. 使用场景
场景:当这个开关改变时,另一个界面的按钮根据开关的状态隐藏或显示(关,按钮隐藏; 开,按钮打开)
- 控制UISwitch控件的初始状态
if ([XJPUserNameModel shardUserModel].SwitchValue) {
[cell.XJPSwitch setOn:YES];
} else {
[cell.XJPSwitch setOn:NO];
}
- 保存按钮开关状态
数据的持久化存储,因在项目中方便,此处随着项目中的其他数据,直接采用了归档方式,其实采用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.使用场景:验证成功后才会打开或则关闭
- 控制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;
网友评论