• 推荐关注模块的实现2


    这次实现右边数据的显示

    我们对上次的代码进行添加及改造

    一.Controller

    在xib中

    把右边的的UITableView也添加上,并将关联到代码中

    /** 服务器传来的数据数组 */
    @property (nonatomic,strong) NSArray *categories;
    /** 服务器传来的数据数组 */
    @property (nonatomic,strong) NSArray *users;
    
    @property (weak, nonatomic) IBOutlet UITableView *categoryTableView;
    
    @property (weak, nonatomic) IBOutlet UITableView *userTableView;

    在DDZRecommendViewController中

    - (void)viewDidLoad {
        [super viewDidLoad];
     
        //初始化数据
        [self setupTableView];
        
        //左侧项目数据请求
        [self dataLeftRequest];
        
    }
    //初始化数据
    - (void)setupTableView {
        
        self.view.backgroundColor = DDZGlobalBg;
        
        self.title = @"推荐关注";
        
        //隐藏滚动条
        self.categoryTableView.showsVerticalScrollIndicator = NO;
        
        //注册左侧cell
        [self.categoryTableView registerNib:[UINib nibWithNibName:NSStringFromClass([DDZRecommendCategoryCell class]) bundle:nil] forCellReuseIdentifier:@"category"];
        //注册右侧cell
        [self.userTableView registerNib:[UINib nibWithNibName:NSStringFromClass([DDZRecommendUserCell class]) bundle:nil] forCellReuseIdentifier:@"user"];
        
        
        //设置insert
        self.automaticallyAdjustsScrollViewInsets = NO;
        self.categoryTableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);
        self.userTableView.contentInset = self.categoryTableView.contentInset;
        
        //设置右侧cell高度
        self.userTableView.rowHeight = 70;
        
        //设置背景蒙版
        [SVProgressHUD show];
        [SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeBlack];
        
        
    }

    (1)设置insert的目的

    是避免导航栏挡住tableview显示的内容

    第一句是禁止自动设置insert

    self.automaticallyAdjustsScrollViewInsets = NO;

    第二句是设置上边距为64(导航栏加状态栏是64点)

    self.categoryTableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);

     

    (2)设置右侧cell的高度

    是因为cell的默认高度是44,不设置无法包含大一点的图片

    //左侧数据请求
    - (void)dataLeftRequest {
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        NSMutableDictionary *dict = [NSMutableDictionary dictionary];
        dict[@"a"] = @"category";
        dict[@"c"] = @"subscribe";
        [manager GET:@"http://api.budejie.com/api/api_open.php" parameters:dict progress:^(NSProgress * _Nonnull downloadProgress) {
            
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
            [SVProgressHUD dismiss];
            
            //回传数据成功(需要字典转数据模型框架)
            self.categories = [DDZRecommendCategory mj_objectArrayWithKeyValuesArray:responseObject[@"list"]];
            
            //刷新页面
            [self.categoryTableView reloadData];
            
            //默认选中首行
            [self.categoryTableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionTop];
            
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            
            [SVProgressHUD showErrorWithStatus:@"加载推荐信息失败!"];
        }];
    }

    设置委托协议

    #pragma mark - <UITableViewDataSource>
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
        
        if (tableView == self.categoryTableView) {
            return self.categories.count;
        }else {
            return self.users.count;
        }
        
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        
        if (tableView == self.categoryTableView) {
            DDZRecommendCategoryCell *cell = [tableView dequeueReusableCellWithIdentifier:@"category"];
            
            cell.category = self.categories[indexPath.row];
            
            return cell;
        }else {
            DDZRecommendUserCell *cell = [tableView dequeueReusableCellWithIdentifier:@"user"];
            
            cell.user = self.users[indexPath.row];
            
            return cell;
        }
    
    }

    因为在一个Controller中有两个UITableView,所以需要复用

    在协议中判断不同的tableview来设置各自的属性

    #pragma mark - <,UITableViewDelegate>
    //被选中
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        
        DDZRecommendCategory *c = self.categories[indexPath.row];
        //请求右侧数据
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        NSMutableDictionary *dict = [NSMutableDictionary dictionary];
        dict[@"a"] = @"list";
        dict[@"c"] = @"subscribe";
        dict[@"category_id"] = @(c.id);
        [manager GET:@"http://api.budejie.com/api/api_open.php" parameters:dict progress:^(NSProgress * _Nonnull downloadProgress) {
            
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
            //回传数据成功(需要字典转数据模型框架)
            self.users = [DDZRecommendUser mj_objectArrayWithKeyValuesArray:responseObject[@"list"]];
            
            //刷新页面
            [self.userTableView reloadData];
            
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            
            NSLog(@"%@",error);
        }];
    }

    每点击一次左边的项目,都会发一次请求,用来更新数据

    二.Model

    多添加一个模型DDZRecommendUser

    /** 头像地址header */
    @property (nonatomic,copy) NSString *header;
    /** 关注数fans_count */
    @property (nonatomic,copy) NSString *fans_count;
    /** 用户名screen_name */
    @property (nonatomic,copy) NSString *screen_name;

    三.View

    多添加一个DDZRecommendUserCell用于自定义右边的数据的cell

    /** 模型数据 */
    @property (nonatomic,strong) DDZRecommendUser *user;
    - (void)awakeFromNib {
        [super awakeFromNib];
       
        
    }
    
    - (void)setUser:(DDZRecommendUser *)user {
        
        _user = user;
        
        [self.userImageView sd_setImageWithURL:[NSURL URLWithString:user.header] placeholderImage:[UIImage imageNamed:@"defaultUserIcon"]];
        self.nameLabel.text = user.screen_name;
        self.fansLabel.text = [NSString stringWithFormat:@"%@人关注",user.fans_count];
    }

  • 相关阅读:
    我的第二个思维导图,用来介绍框架
    如何减少基于DataSet框架的代码输入量(一)
    近日
    关于客户端如何获取服务器时间的方法
    匹配用逗号分隔的数字(防sql注入检查)
    十六进制字符串转整形
    sql获取自增行号
    body不出现滚动条方法
    vs2010 无法调试 无法进入断点 断点无效
    Textarea 高度自适应 根据内容自适应高度
  • 原文地址:https://www.cnblogs.com/langji/p/5433871.html
Copyright © 2020-2023  润新知