一.整体布局
1.项目需求
点击左边cell,右边的cell数据更新
2.界面搭建
2.1交给两个控制器管理比较麻烦,点击一个控制器需要通知另外一个控制器
2. 2因此交给一个控制器管理比较好
2.3用xib搭建,左右各放一个tableView就可以了
3.开发顺序
先做左边的tableView,再做右边的,因为右边的数据是根据左边变化的
二.左边tableView界面搭建
1.自定义cell
左边一个指示器欧一个view 中间位置用label
2.设置数据源
两个tableView设置同一个控制器为数据源和代理,实现方法的时候要先判断tableView的类型
3.请求数据,查看接口文档
4.字典转模型
5.显示数据
6.运行发现一个tableView顶部被挡住,另一个没被挡住,为什么?
苹果默认只给界面上一个scrollView设置额外滚动区域,只需要取消自动设置的额外滚动区域,自己手动设置就可以了
7.选中cell,让cell的指示器显示
7.1 怎么实现?
监听cell选中,选中就让指示器显示
7.2 但是还要监听取消选中,把指示器隐藏
7.3 怎么同时监听一个cell被选中,另一个cell取消选中?
cell自己有一个方法可以同时监听
// 调用时刻:当一个cell选中的时候就会调用,并且一个cell取消选中的时候也会调用 - (void)setSelected:(BOOL)selected animated:(BOOL)animated7.4 cell不需要选中状态
[self.categoryTableView reloadData]; // 默认选中第0个cellNSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];[self.categoryTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];3.手动选中左边第0个cell,发现右边数据没刷新
- (void)viewDidLoad { [super viewDidLoad];self.title = @"推荐关注"; self.automaticallyAdjustsScrollViewInsets = NO; _categoryTableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0); _userTableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0); // 分类tableView注册cell [_categoryTableView registerNib:[UINib nibWithNibName:@"XMGCategoryCell" bundle:nil] forCellReuseIdentifier:categoryID]; // 用户tableView注册cell [_userTableView registerNib:[UINib nibWithNibName:@"XMGSubTagCell" bundle:nil] forCellReuseIdentifier:userID]; // 请求分类数据 [self loadCategoryData]; // 添加上下拉刷新 [self setupRefreshView]; }- (void)setupRefreshView{ // 下拉刷新 // 当松手,并且下拉刷新完全显示的时候,就会触发下拉刷新 MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewUserData)]; header.automaticallyChangeAlpha = YES; self.userTableView.mj_header = header;// 上拉刷新 MJRefreshAutoNormalFooter *footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreUserData)]; footer.automaticallyHidden = YES; self.userTableView.mj_footer = footer;} - (void)loadCategoryData{ AFHTTPSessionManager *mgr = [AFHTTPSessionManager xmg_manager];NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; parameters[@"a"] = @"category"; parameters[@"c"] = @"subscribe";[mgr GET:XMGBaseUrl parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary * _Nullable responseObject) { NSArray *dictArr = responseObject[@"list"];_categorys = [XMGCategoryItem mj_objectArrayWithKeyValuesArray:dictArr];[self.categoryTableView reloadData];// 默认选中第0个cell NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; [self.categoryTableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];[self tableView:self.categoryTableView didSelectRowAtIndexPath:indexPath];} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {}];}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ if (tableView == _categoryTableView) { // 显示分类TableView return _categorys.count; } return _selectCategoryItem.users.count;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ if (tableView == _categoryTableView) { // 显示分类TableView XMGCategoryCell *cell = [tableView dequeueReusableCellWithIdentifier:categoryID]; cell.item = _categorys[indexPath.row]; return cell; }XMGSubTagCell *cell = [tableView dequeueReusableCellWithIdentifier:userID]; cell.user = _selectCategoryItem.users[indexPath.row]; return cell;} - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ if (tableView == _categoryTableView) { return 44; } return 60 + 1;}// 点击cell就会调用// 必须用户手动点击cell才会触发- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ if (tableView == _categoryTableView) { // 记录选中分类模型 _selectCategoryItem = _categorys[indexPath.row]; // 点击分类cell // 判断之前有没有数据 if (_selectCategoryItem.users.count) {[self.userTableView reloadData];self.userTableView.mj_footer.hidden = _selectCategoryItem.page > _selectCategoryItem.total_page; return; } // 请求右边用户数据 [self loadNewUserData];} }// 没有更多数据的时候,隐藏上拉刷新控件// 判断当前分类用户组 有没有更多用户组// 加载更多用户数据- (void)loadMoreUserData{ [self.mgr.tasks makeObjectsPerformSelector:@selector(cancel)];NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; parameters[@"a"] = @"list"; parameters[@"c"] = @"subscribe"; parameters[@"category_id"] = _selectCategoryItem.id; parameters[@"page"] = @(_selectCategoryItem.page);[self.mgr GET:XMGBaseUrl parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary * _Nullable responseObject) {[self.userTableView.mj_footer endRefreshing];_selectCategoryItem.page++; NSArray *dictArr = responseObject[@"list"];NSArray *users = [XMGUserItem mj_objectArrayWithKeyValuesArray:dictArr];// 取出数组中所有元素,添加到新数组// [_selectCategoryItem.users addObject:users]; [_selectCategoryItem.users addObjectsFromArray:users];[self.userTableView reloadData];// 控制上拉控件是否显示,一定要在reloadData之后 self.userTableView.mj_footer.hidden = _selectCategoryItem.page > _selectCategoryItem.total_page; } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {}];}// 加载更新用户数据- (void)loadNewUserData{ _selectCategoryItem.page = 1; [self.mgr.tasks makeObjectsPerformSelector:@selector(cancel)];NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; parameters[@"a"] = @"list"; parameters[@"c"] = @"subscribe"; parameters[@"category_id"] = _selectCategoryItem.id;[self.mgr GET:XMGBaseUrl parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary * _Nullable responseObject) {_selectCategoryItem.page++;// 记录当前分类总页码数 _selectCategoryItem.total_page = [responseObject[@"total_page"] integerValue];// 结束刷新 [self.userTableView.mj_header endRefreshing];NSArray *dictArr = responseObject[@"list"];_selectCategoryItem.users = [XMGUserItem mj_objectArrayWithKeyValuesArray:dictArr];[self.userTableView reloadData];self.userTableView.mj_footer.hidden = _selectCategoryItem.page > _selectCategoryItem.total_page;} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {}];}以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。