BSBuDeJie_02
Posted 耍流氓的兔兔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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]; }
以上是关于BSBuDeJie_02的主要内容,如果未能解决你的问题,请参考以下文章