iOS 中实现绑定变化的 思路

在HTML 中一旦 为视图绑定了 变量,当后续变量值发生改变时,视图上的值可以自动改成相应的值。

当然,这在iOS中也很容易实现。通知。代理。block 回调。甚至本地化+跳转刷新。

但是这些方式,都需要写较多的代码就实现。

实例场景: 多个界面均显示 用户昵称。当用户编辑修改昵称之后。需要其他界面都同时修改。

新方法实现思路:

自定义子类继承UILabel, 对象在创建之后存储起来到一个静态数组中。提供一个类方法,当label 发生改变时调用。其他子类对应改变。只需要一行代码,同时只需要在触发源处调用,其他视图类不需要添加代码,减少耦合。

实现代码:

头文件

@interface BindLabel : UILabel


+ (id)shareInstance;
// 查看池内量
+ (void)countOfBind;
// 修改
+ (void)change:(NSString *)content;

@end

实现文件:

static NSMutableArray <BindLabel*>*mBindLabelArr; // 存储池

@implementation BindLabel

+ (id)shareInstance{
    if (mBindLabelArr == nil) {
        mBindLabelArr = [NSMutableArray new];
    }
    BindLabel* bl = [[BindLabel alloc] init];
    [mBindLabelArr addObject:bl];
    return bl;
}

+ (void)countOfBind{

    NSLog(@"countBind = %lu",(unsigned long)mBindLabelArr.count);
}

+ (void)change:(NSString *)content{

    [mBindLabelArr enumerateObjectsUsingBlock:^(BindLabel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        
       obj.text = content;
    }];
    
}

// 经测试,label 所在 VC 出栈时,触发willMoveToSuperview:,newSuperview=null。已经销毁的lable 从池中删除
- (void)willMoveToSuperview:(UIView *)newSuperview{
    if (newSuperview == NULL) {
        [mBindLabelArr removeObject:self];
    }
}

@end

调用方法

        [BindLabel change:@"1234"];

经测试,可以实现绑定变化 效果。














 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值