和同事交流的时候总是能够学到新的知识,因为早些年学php和前端的缘故,面向过程的思想会多些,这样真的就浪费了面向对象预言的简洁优美。最好就是能够学会封装
今天写的其中一个页面,用原来的思路(面向过程)和现在的思路(面向对象)昨个对比,就会知道封装的必要性!
先上图,看看效果:
因为只是作演示效果 请大家忽略我那些很丑的色块吧! 谢谢!
先来分析若是早些时候,我会怎么去处理这个页面:
1.创建VC
2.创建ScrollView属性
3.创建三个tableview 加载在scrollview中 (真的很蠢啊,数据源都在同一个控制器内,很不好管理,要是老板要你写更多的tableview 那岂不是要哭晕在厕所)
4.网络请求不同tableview的数据 装在三个不同的数组
5.最麻烦的: tableview的协议代理要区分tableview (因为数据不同)
6.还有更麻烦的,区分了tableview,cell的样式等等都要考虑在内
所以:杂七杂八的逻辑加起来,计算代码写的多么精简,压在一个控制器内,显得冗杂并且别人一看,一个页面居然有大好几百行的代码,别人看到难免心里默默就会想【原来你是个新人啊or技术不怎么样啊】我们一定要学会封装,要把自己包装到其实本来我们就很好!
以下是我用面向对象的思想来做事的:
这一个总的控制器内包括了:
1.三个选择按钮(看做一个整体)
2.三个tableview 放在scrollview内(看做一个整体)
3.tableview单独在外用TableViewController处理
4.因为三个tableview有共性,所以可以再写一个父类编写tableview的共同之处用以集成
4.tableview中的cell可以单独封装样式
1.tableview 的父类:BaseTableViewController
@implementation BaseTableViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 每行cell的高度
self.tableView.rowHeight = 85;
// 每组的组头高度
self.tableView.sectionHeaderHeight = 10;
self.tableView.showsVerticalScrollIndicator = NO;
self.tableView.backgroundColor = [UIColor cyanColor];
}
//数据源
-(NSMutableArray *)orders{
if (_orders == nil) {
_orders = [NSMutableArray array];
}
return _orders;
}
-(instancetype)init{
return [self initWithStyle:UITableViewStyleGrouped];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// return self.orders.count;
return 2;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {