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 = ;
self.textLabel.height = self.contentView.height - * 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(, , ) : BSRGBColor(, , );
}
6 默认选中首行
//默认选中首行
[self.categoryTableView selectRowAtIndexPath:[NSIndexPath indexPathForRow: inSection:] animated:NO scrollPosition:UITableViewScrollPositionTop];
二 右边的用户数据
设置inset布局,保证两个tableview的inset相同
//设置inset
self.automaticallyAdjustsScrollViewInsets = NO; self.categoryTableView.contentInset = UIEdgeInsetsMake(, , , );
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 == ); 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 < ) {
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 = ;
frame.size.width -= * frame.origin.x;
frame.size.height -= ;
[super setFrame:frame];
}
BSBuDeJie_02的更多相关文章
随机推荐
- Linux下忘记MySQL的root密码的解决方法
恢复方法之一 1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态下,其他的用户也 ...
- Android 组件和进程的一些关系
1.Service 如果没有单独指定线程的话,那么和主activity是在同一个线程的,就是主线程,那么也不能够在这个service中做耗时操作,否则一定会中断退出. 2.默认情况下,一个Androi ...
- PYTHON 写函数,计算传入字符串中【数字、字母、空格、以及其他的个数】
def func1(s): al_num = 0 spance_num = 0 digit_num = 0 others_num = 0 for i in s: if i.isdigit(): # i ...
- JQuery mobile中按钮自定义属性的改变
1..ui-mobile-viewport是jquery mobile默认给body加的class,这样的话包含选择符优先级高一点 <style> .ui-mobile-viewport ...
- 将 VMware 最小化到系统托盘
1, 下载 Trayconizer官网地址: http://www.whitsoftdev.com/trayconizer/下载地址: http://www.whitsoftdev.com/files ...
- Python验证码6位自动生成器
Python验证码6位自动生成器
- 【sublime xftp插件】 Host key verification failed ,错误处理
错误背景: 1.CentOS7上面作为运行环境,Coding在本机的windows环境 2.在windows上安装sublime 3,然后保存代码通过xftp保存到centos7虚机上面. 3.Cen ...
- vim 使用
vim有三种模式:输入模式,命令模式,底行模式,使用esc进入命令模式,在命令模式下按英文的冒号,进入底行模式:命令行模式下按i进入输入模式.vim编辑文件是将文件内容复制到缓冲区显示在屏幕上. vi ...
- Vim基础操作
在正式使用Vim之前,先来点开胃菜,学习下Vim中一些常用的命令,有了这些基本命令,才能让我们使用Vim更加得心应手,加快工作的效率~ 注意:接下来将要介绍的命令主要是用在Vim的Normal模式下. ...
- 模拟搭建Web项目的真实运行环境(二)
上一节已经介绍了如何在虚拟机中部署测试环境,接下来将介绍怎么在ubuntu下部署redis. 一.在ubuntu安装Xrdp + Vnc 为了在以后可以通过windows系统来远程操作ubuntu ...