RACObserve(TARGET, KEYPATH) :监听某个对象的某个属性,返回的是一个信号
@weakify(Obj) 与 @strongify(Obj) ,这两个一般是配套使用,解决循环引用问题
RACTuplePack :把数据包装成RACTuple(元组类),被包装的数据必须是 object类数据
RACTupleUnpack :把RACTuple(元组类)解包成对应的数据,解包参数的顺序及数据类型要和包装数据时的顺序及类型保持一致
本文介绍两个开发中常用的场景,第一个是UITableView列表界面通过网络请求数据展示数据,第二个是登录功能。功能比较基础,但都是精髓。分享一下笔者对MVVM的一些见解,在此抛砖引玉,希望能对广大开发者提供一点思路。
效果如上图,实现此功能用到的类:
1、OrderController
OrderController主要讲的是ViewModelEvent中的方法,其他也没什么可说的
2、RequestViewModel:主要向控制器提供数据,通知tableView刷新界面
RequestViewModel.h
RequestViewModel.m
3、OrderCell和OrderModel
跟之前MVC做法完全一致,其实没什么好说的
OrderCell.h
OrderCell.m
OrderModel.h
效果如上图,实现此功能用到的类:
1、LoginController
2、LoginViewModel
前提条件,存在A和B两个页面,A是主界面,A push 到 B
方法一:如果B页面的返回按钮要用自定义的按钮(在iOS7中,如果使用了UINavigationController,那么系统自带的附加了一个从屏幕左边缘开始滑动可以实现pop的手势。但是,如果自定义了navigationItem的leftBarButtonItem,那么这个手势就会失效。)
在A界面:
- (void)viewDidAppear:(BOOL)animated {
self.navigationController.interactivePopGestureRecognizer.delegate = (id)self//重新设置代理
self.navigationController.interactivePopGestureRecognizer.enabled = NO//本页面不能右滑
}
在B里面:
设置返回按钮:
UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom]
backBtn.frame = CGRectMake(5, 2, 21, 35)
[backBtn setImage:[UIImage imageNamed:@"back"] forState:UIControlStateNormal]
[[backBtn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
[self.navigationController popViewControllerAnimated:YES]
}]
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithCustomView:backBtn]
self.navigationItem.leftBarButtonItem = backItem
self.navigationController.interactivePopGestureRecognizer.enabled = YES//最重要的一步
方法二:在A页面里面(A页面里面的backBarButtonItem其实就是我们看到的B页面的返回按钮,B页面的leftBar是左侧的按钮,注意优先级,B里面有自定义leftBar,显示B页面的,如果没有,看A界面,如果里面有backBarButtonItem,显示,如果没有,就是系统默认的那个)
UIImage* image = [UIImage imageNamed:@"back"]
UIBarButtonItem *item = [[UIBarButtonItem alloc] init]
[item setBackButtonBackgroundImage:[image resizableImageWithCapInsets:UIEdgeInsetsMake(0, image.size.width, 0, 0)] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]
[item setBackButtonTitlePositionAdjustment:UIOffsetMake(-400.f, 0) forBarMetrics:UIBarMetricsDefault]
self.navigationItem.backBarButtonItem = item
self.navigationItem.backBarButtonItem = item
我采用的是方法一,方法二我没有办法调整返回按钮的位置
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)