iOS - 一个页面多个tableview

本文通过对比面向过程和面向对象两种思路,展示了如何在iOS开发中优雅地处理一个页面包含多个TableView的情况。重点讲解了面向对象的封装技巧,包括使用独立的TableViewController处理每个TableView,创建父类处理共同逻辑,以及封装Cell样式,从而减少代码冗余,提高代码可读性和维护性。
摘要由CSDN通过智能技术生成

和同事交流的时候总是能够学到新的知识,因为早些年学php和前端的缘故,面向过程的思想会多些,这样真的就浪费了面向对象预言的简洁优美。最好就是能够学会封装

今天写的其中一个页面,用原来的思路(面向过程)和现在的思路(面向对象)昨个对比,就会知道封装的必要性!
先上图,看看效果:
一个页面嵌套三个可滑动的tableview
滑动中的tableview显示
因为只是作演示效果 请大家忽略我那些很丑的色块吧! 谢谢!

先来分析若是早些时候,我会怎么去处理这个页面:
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 {
     
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值