码迷,mamicode.com
首页 > 其他好文 > 详细

BSBuDeJie_02

时间:2016-11-11 00:06:46      阅读:300      评论:0      收藏:0      [点我收藏+]

标签:key   block   api   image   row   mat   with   selected   list   

一 左边的类别数据

  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];
}

 

八 补充

  1

  2

  3

九 分页的2种做法

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

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

十二 键盘处理

BSBuDeJie_02

标签:key   block   api   image   row   mat   with   selected   list   

原文地址:http://www.cnblogs.com/roxy/p/6052584.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!