如何监听某个控件(继承自UIControl)的一些行为或者事件?
- 1.如果能直接拿到该控件,直接给该控件添加target进行监听
- 2.如果不能拿到该控件,可以尝试成为该控件的父控件的代理
- 3.如果2还行不通(可能该控件的父控件没有代理),可以尝试成为控制器的代理
以监听UITabBarButton的点击为例
- 1.因为我们可以直接拿到导航条中的tabBarButton,所以可以直接给tabBarButton添加target进行监听
- 2.假设tabBarButton不能直接拿到,可以尝试成为tabBarButton 的父控件UITabBar的代理,发现UITabBarController已经是tabBar的代理,我们不能去修改其代理属性,不然就会使程序崩掉.现在我们想要监听tabBarButton的点击其实很简单,只要在UITabBarController中实现
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
这个代理方法,就能够监听到tabBarButton的点击
- 3.假设UITabBar没有代理属性,可以尝试着去找UITabBarController是否有代理属性,只要成为了UITabBarController的代理,是不是就能够监听到tabBarButton的点击?事实验证确实能够监听.
估算高度
1.优点
1> 减少heightForRowAtIndexPath方法的调用次数
2> 可以让暂时看不见的cell的高度延迟计算
2.缺点
1> contentSize的不太准确的
2> 滑动过程中,滚动条的长度会变来变去(可能会有跳跃效果)
heightForRowAtIndexPath方法的调用时刻
一.如果没有设置估算高度estimatedRowHeight
1.每当reloadData时,有多少条数据,就会调用多少次这个方法(比如一共有100条数据,就会调用100次这个方法)
2.每当有cell出现时,就会调用一次这个方法
二.如果设置了估算高度estimatedRowHeight
1.每当有cell出现时,就会调用一次这个方法
addObject:和addObjectsFromArray:的区别
self.topics = @[20, 19, 18]
moreTopics = @[17, 16, 15]
self.topics = @[20, 19, 18, @[17, 16, 15]]
[self.topics addObject:moreTopics];
self.topics = @[20, 19, 18, 17, 16, 15]
[self.topics addObjectsFromArray:moreTopics];
服务器分页的做法
服务器数据库的数据 = @[23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10]
第1页数据 == @[20, 19, 18, 17, 16]
做法1:
发送page参数 : page=2
第2页数据 == @[18, 17, 16, 15, 14]
做法2:
发送maxid参数 : maxid=16
第2页数据 == @[15, 14, 13, 12, 11]
集成MJRefresh
self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewTopics)];
[self.tableView.mj_header beginRefreshing];
self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreTopics)];
利用AFN取消请求
// 取消所有请求
for (NSURLSessionTask *task in self.manager.tasks) {
[task cancel];
}
// 取消所有请求
[self.manager.tasks makeObjectsPerformSelector:@selector(cancel)];
// 关闭NSURLSession + 取消所有请求
// NSURLSession一旦被关闭了, 就不能再发请求
[self.manager invalidateSessionCancelingTasks:YES];
// 注意: 一个请求任务被取消了(cancel), 会自动调用AFN请求的failure这个block, block中传入error参数的code是NSURLErrorCancelled
UIAlertController
UIAlertController *controller = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
[controller addAction:[UIAlertAction actionWithTitle:@"收藏" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"点击了[收藏]按钮");
}]];
[controller addAction:[UIAlertAction actionWithTitle:@"举报" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"点击了[举报]按钮");
}]];
[controller addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"点击了[取消]按钮");
}]];
// [controller addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
// textField.textColor = [UIColor redColor];
// }];
[self.window.rootViewController presentViewController:controller animated:YES completion:nil];