项目结构:
ViewController:
- (void)viewDidLoad {
[super viewDidLoad];
_vModel = [MyViewModel new];
_myView = [[MyView alloc]initWithFrame:self.view.bounds];
[self.view addSubview:_myView];
[_vModel setModel];
[_myView showView:_vModel];
}
View.h:
#import <UIKit/UIKit.h>
#import "MyViewModel.h"
#import "FBKVOController.h"
#import "NSObject+FBKVOController.h"
@interface MyView : UIView
@property (nonatomic,strong) UILabel *myLabel;
@property (nonatomic,strong) UIButton *btn;
@property (nonatomic,strong) MyViewModel *VM;
- (void)showView:(MyViewModel *)viewModel;
@end
View.m
#import "MyView.h"
@implementation MyView
- (instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
self.myLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, self.bounds.size.width, 60)];
_myLabel.backgroundColor = [UIColor greenColor];
[self addSubview:self.myLabel];
self.btn = [UIButton buttonWithType:UIButtonTypeSystem];
self.btn.frame = CGRectMake(0, 50, self.bounds.size.width, 60);
[self.btn addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];
self.btn.backgroundColor = [UIColor redColor];
[self.btn setTitle:@"点击" forState:UIControlStateNormal];
[self addSubview:self.btn];
}
return self;
}
- (void)click{
[self.VM responseClick];
}
- (void)showView:(MyViewModel *)viewModel{
self.VM = viewModel;
[self.KVOController observe:viewModel keyPath:@"contentStr" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionInitial block:^(id _Nullable observer, id _Nonnull object, NSDictionary<NSKeyValueChangeKey,id> * _Nonnull change) {
NSLog(@"%@",change[NSKeyValueChangeNewKey]);
self.myLabel.text = change[NSKeyValueChangeNewKey];
}];
}
- (void)layoutSubviews{
[super layoutSubviews];
}
@end
Model.h:
@interface MyModel : NSObject
@property (nonatomic,copy) NSString *title;
@end
ViewModel.h:
#import <Foundation/Foundation.h>
#import "MyModel.h"
@interface MyViewModel : NSObject
@property (nonatomic,copy) NSString *contentStr;
- (void)setModel;
- (void)responseClick;
@end
ViewModel.m:
#import "MyViewModel.h"
#import "FBKVOController.h"
@implementation MyViewModel
- (void)setModel{
MyModel *model = [MyModel new];
model.title = @"淘宝";
self.contentStr = model.title;
}
- (void)responseClick{
NSInteger num = arc4random_uniform(20);
NSString *str = [NSString stringWithFormat:@"%ld",num];
self.contentStr = str;
}
@end