今天把关注界面大致写了一下

偷了个懒,这个界面直接用XIB拉出来的,中间那个九宫格的图片,其实就是一张整图片,这个界面没什么好主意的,只是需要主意一下约束而已,这个不好说,仁者见仁智者见智,每个人的约束都不一样,只要效果有就行了,接下来是点击左上角的第二个界面,如下图

上面这个界面我大致的思路

  • 左边的列表为一个TableView,右边也是一个TableView,2个表视图用XIB约束下即可,然后与代码关联
  • 左边的类别是通过API请求回来的,不是自己写数组写的,那个白线的效果是直接在画XIB的时候就新加一个白色的View在下方
  •  

  • 右边的列表的cell中间的横线是先取消掉TableView的分栏效果,然后将cell的高度-1,透视出背景色
  • //设置cell的间距
    - (void)setFrame:(CGRect)frame {
        frame.size.height -= 1;
        [super setFrame:frame];
    }

     

  • 在刚进这个推荐关注的时候,需要默认选择第一个分类
  • - (void)loadLeftData {
        NSMutableDictionary *params = [NSMutableDictionary dictionary];
        params[@"a"] = @"category";
        params[@"c"] = @"subscribe";
        
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        [manager GET:urlAPI parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            _leftTabArray = [XHLeftTabModel mj_objectArrayWithKeyValuesArray:responseObject[@"list"]];
            
            [_leftTab reloadData];
            
            //默认选种首行,注意要刷新了表格才能设置默认选择
            [_leftTab selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionTop];
            
            //让右边的表开始刷新
            [_rightTab.mj_header beginRefreshing];
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            [SVProgressHUD showErrorWithStatus:@"刷新数据失败"];
        }];
        
    }

    要注意要先刷新表视图,才能设置默认选择项.

  • 在一个页面有2个表视图,判断是哪个TableView,代码如下
  • - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        if (tableView == _leftTab) {
            XHLeftTabCell *cell = [tableView dequeueReusableCellWithIdentifier:leftIdentifier];
            cell.leftTabModel = _leftTabArray[indexPath.row];
            return cell;
        }else {
            XHRightUserCell *cell = [tableView dequeueReusableCellWithIdentifier:rightIdentifier];
            cell.rightUsreModel = [_leftTabArray[_leftTab.indexPathForSelectedRow.row] users][indexPath.row];
            return cell;
        }
    }

     

  • 关于左边的那个分类表视图,没有像做头部视图那样用算坐标的方法来使红条滑动,而是直接每个cell都有个红条,然后根据selected来判断点击的是哪一个cell,就将其他cell的红条给hidden掉就行了,换背景色也是一样的思路,也是根据selected来换,为了和右边的表视图保持颜色一致,代码如下
  • //根据选中的cell来换颜色和红条
    - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
        [super setSelected:selected animated:animated];
        //没被选中的cell红条隐藏
        self.redLine.hidden = !selected;
        //使用三目来设置选中和未被选中的字体颜色
        self.textLabel.textColor = selected ? [UIColor redColor] : [UIColor colorWithRed:80/255.0 green:80/255.0 blue:80/255.0 alpha:1];
        
        UIView *whiteColor = [[UIView alloc]init];
        whiteColor.backgroundColor = [UIColor whiteColor];
        
        UIView *grayColor = [[UIView alloc]init];
        grayColor.backgroundColor = RGB(240, 240, 240);
        //设置背景色,与右边的保持一致
        self.selectedBackgroundView = selected ? whiteColor : grayColor;
    }