zoukankan      html  css  js  c++  java
  • BSBuDeJie_02

    一 左边的类别数据

      1 模型 和 字典中的数据对应 

    /* id */
    @property (nonatomic, assign) NSInteger *id;
    /* 总数 */
    @property (nonatomic, assign) NSInteger count;
    /* 名字 */
    @property(nonatomic, copy) NSString *name; 

      2 字典转模型

            //字典转模型
            self.categories = [BSRecommentCategory mj_objectArrayWithKeyValuesArray:responseObject[@"list"]]; 

      3 this class is not key value coding-compliant for the key id.

      一般是IB中的链接设置有问题,有无效的链接,比如将某个outlet名字改了,而没有把这个链接删除,同时可以确认下项目的plist文件是否有关于IB的设置,如果有删除即可

      4 从新调整内部的textlabel的frame

    - (void)layoutSubviews
    {
        [super layoutSubviews];
        
        //重新调整内部textLabel的frame
        self.textLabel.y = 2;
        self.textLabel.height = self.contentView.height - 2 * self.textLabel.y;
    }

      5 选中cell时,内部的子控件不会显示高亮

        

       可以在这个方法中监听cell的选中和取消选中

    - (void)setSelected:(BOOL)selected animated:(BOOL)animated
    {
        [super setSelected:selected animated:animated];
        
        self.selectedIndicator.hidden = !selected;
        self.textLabel.textColor = selected ? BSRGBColor(219, 21, 26) : BSRGBColor(78, 78, 78);
    }

      6 默认选中首行

            //默认选中首行
            [self.categoryTableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:UITableViewScrollPositionTop];

      

    二 右边的用户数据

      设置inset布局,保证两个tableview的inset相同

        //设置inset
        self.automaticallyAdjustsScrollViewInsets = NO;
        
        self.categoryTableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);
        self.userTableView.contentInset = self.categoryTableView.contentInset; 

      

    三 解决重复请求

     得到点击的行号

    self.categoryTableView.indexPathForSelectedRow.row

      

    四 加载第二页数据

      刷新控件<MJRefresh.h> 

    //添加刷新控件
    - (void)setupRefresh
    {
        self.userTableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
            BSLog(@"进入上拉刷新");
        }];
        self.userTableView.mj_footer.hidden = YES;
    }
            //让底部控件结束刷新
            [self.userTableView.mj_footer endRefreshing];
            //没有更多数据
            [self.userTableView.mj_footer endRefreshingWithNoMoreData];

      

    五 加载更多页数据

    六 下拉上拉

      1 头部上拉

    //添加刷新控件
    - (void)setupRefresh
    {
        self.userTableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewUsers)];
        self.userTableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreUsers)];
        self.userTableView.mj_footer.hidden = YES;
    }

      2 可以通过自定义的属性来判断数据的加载 

    //时刻监测footer的状态
    - (void)checkFooterState
    {
        BSRecommentCategory *rc = BSSelectedCategory;
        NSInteger count = rc.users.count;
        
        //每次刷新右边数据时,都控制footer显示或隐藏
        self.userTableView.mj_footer.hidden = (count == 0);
        
        if(count == rc.total){
            [self.userTableView.mj_footer endRefreshingWithNoMoreData];
        }else{
            [self.userTableView.mj_footer endRefreshing];
        }
        
    }

      3 在下拉刷新时,可能会将第一页数据存入数组多次

            //清除所有旧数据
            [rc.users removeAllObjects];
            //添加到当前类对应的用户数组中
            [rc.users addObjectsFromArray:users];

    七 控制器销毁处理

      1 多次发送请求时,只处理最后一次请求

         每发一次请求,就会有一个全新的params

        self.params = params;
        
        [[AFHTTPSessionManager manager] GET:@"http://api.budejie.com/api/api_open.php" parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
            if (self.params == params) return;

      2  如果有一个控制器请求正在发送,但是控制器已被销毁,此时怎么处理

        将请求销毁,阻止AFN请求回来再次访问

    /*  AFN请求管理者 */
    @property (nonatomic, strong) AFHTTPSessionManager *manager;
    #pragma mark - 控制器的销毁
    
    - (void)dealloc
    {
        [self.manager.operationQueue cancelAllOperations];
    }

    八 补充

    九 分页的2种做法

      1 将页码传给服务器

      2 将id传给服务器

    十 推荐标签01-显示标签数

      1 加载自定义的cell

        给自定义的cell设置标识

        在tableview控制器中加入头文件

        注册cell(需要标识符)

         在cellForRow方法中返回cell(需要标识符)

      2 控制数据在不同数据范围之间的不同显示

        NSString *subNumber = nil;
        if (recommentTag.sub_number < 10000) {
            subNumber = [NSString stringWithFormat:@"%zd人订阅", recommentTag.sub_number];
        }else{
            subNumber = [NSString stringWithFormat:@"%.1f万人订阅", recommentTag.sub_number / 10000.0];
        }
        self.subNumberLabel.text = subNumber;

      

    十一 推荐标签02-cell之间的间隙

      1 减小contentView的宽度和左间距,cell设置为clearColor

      2 设置cell的左间距,然后使cell的高度宽度变小,使间隙成为分割线

      3 使得不可轻易改变自定义控件的frame

    - (void)setFrame:(CGRect)frame
    {
        frame.origin.x = 5;
        frame.size.width -= 2 * frame.origin.x;
        frame.size.height -= 1;
        [super setFrame:frame];
    }
  • 相关阅读:
    游标、锁
    树形背包浅谈
    金字塔
    Codeforces Round #652 (Div. 2) 题解
    NOI1999 棋盘分割
    NEERC2002 Folding
    HDU4283 You Are the One
    Codeforces Round #646 (Div. 2) 题解
    洛谷 P1679 神奇的四次方数
    UVA12563 劲歌金曲
  • 原文地址:https://www.cnblogs.com/roxy/p/6052584.html
Copyright © 2011-2022 走看看