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的更多相关文章
随机推荐
- 在JS中关于堆与栈的认识function abc(a){ a=100; } function abc2(arr){ arr[0]=0; }
平常我们的印象中堆与栈就是两种数据结构,栈就是先进后出:堆就是先进先出.下面我就常见的例子做分析: main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main( ...
- 03OC的类的补充
上一章我们介绍了类的定义,以及类的里面如何定义成员变量,如何定义方法等等. 一.self关键字 1.在C#中有关键字this表示当前对象,其实在OC中也有类似的关键字self,只是self关键字不仅表 ...
- C#高级编程笔记 Day 8, 2016年9月 28日 (数组)
1.数组的初始化 声明了数组后,就必须为数组分配内存,以保存数组的所有元素.数组是引用类型,所以必须给它分配堆上的内存,为此,应使用 new 运算符,指定数组中元素的类型和数量来初始化数组的变量.若使 ...
- PHP setcookie() 函数
语法 setcookie(name,value,expire,path,domain,secure): name 必需.规定 cookie 的名称. value 必需.规定 cookie 的值. ex ...
- sublime3侧边栏颜色修改,推荐主题
sublime侧边栏的颜色默认是灰白色的,下面方法可以手动定制颜色为深色: 需要修改的文件为: C:\program\Sublime\Packages\Theme - Default.sublime- ...
- senlin __init__() got an unexpected keyword argument 'additional_headers'
从senlin源码重新编译更新了服务,然后执行 senlin的 cli就遇到了错误: __init__() got an unexpected keyword argument 'additional ...
- mongoosejs学习地址
http://mongoosejs.com/docs/api.html#querystream-js Node的小基友supervisor 和 forever 不要忘记了,相信你会喜欢他们的:) ht ...
- oracle数据库安装完要做的事情。
安装数据库客户端.这个在oracle官网可以下载安装(下载链接) 安装PL/SQL PL在下载 配置环境变量(这个比较重要,不配置PLSQL链接不到数据库) 配置的相关环境变量有: 变量名:oracl ...
- Forward-backward梯度求导(tensorflow word2vec实例)
考虑不可分的例子 通过使用basis functions 使得不可分的线性模型变成可分的非线性模型 最常用的就是写出一个目标函数 并且使用梯度下降法 来计算 梯度的下降法的梯度 ...
- UWP 禁止Pivot swip 手势
以前想要禁止内置的手势动作,看了一下网上是设置 IsLocked="True". 但是拿到UWP上来,靠,设置了之后header只显示当前的那个header.这样的设计真是丑爆了. ...