2014的一些记录
拖进来的工程 要先编译一遍 在主工程的build phase里添加副工程对应的.a文件 在header path中添加对应的路径
CMB项目里 从PageViewController里的shouldStartLoadWithRequest方法中看出 好像是用的截获URL来进行OC与JS交互的
DASSC项目里 LuanchViewController里的didDownloadData方法中看出 好像是获取到数据后 全部以对应的NSUserDefaults形式存在本地
打开Finder,按下shift+cmd+g,输入 “/etc/hosts”(引号内的内容) 再按回车,你就找到了Mac的host文件
适配iPhoneX的时候 如果模拟器正常 真机上下有黑边 lunanch图片的适配 这时候 试试使用jpg图片
打包时候报错Command /bin/sh failed with exit code 1 可以试试看 第三方库里有么可以问题 包括xib文件 可能的原因是第三方库缺少xib文件
BussinessGoodsModel 这个Model可以作为Model的基类 创建Model 可以参考这个类 或者 Account比这个类更好的是DBBMobo中的HSTIndex类 这个类 一个是initWithDic 一个是initWithCoder
// 在圈子的Controller的通讯录的ContactsViewController.m中 f搜索功能做的很完美 以后如果需要做搜索 可以参考 在发布活动的页面 有定位并且 详情地图拖动地图获取附近信息的页面
//机构管理 人员管理部分 所有页面的 有学号工号的地方 都把长度由原来的-10 改成现在的-3了 为了让七位的号可以不折行
//导游详情页面的点击图片放大的控件根据新鲜事详情或者校花校草详情里的stbrowsphoto改变一下 校花校草校景新鲜事四个模块的所有页面的本地化数据都暂时注掉了 担心引起不必要的错误
//1、跳出整个方法用return; 2、中止循环用break; 3、跳出本次循环用continue; 数据请求的HttpManager.m里 登录接口里添加了httpHeader 包括 设备UUID 设备机型
//获取当前设备的机型 引入头文件 #import <sys/sysctl.h> 然后在方法中写下边的
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];
free(machine);
//目前首页这里有几处问题 登录时 没有发送登录的通知 注销时也没有发送通知 用户自己修改了自己的学校也没有发送通知 测试如果发送通知
//如果要隐藏一个cell 可以把cell高度赋值的那个方法里 把这条cell的返回高度 返回成0.00000001; //是不是不打开imageView的userInteractionEnabled的话 imageView加载button上 不影响button的点击 因为完全可以透过imageView来点击到button
//校景详情改了 调接口的时候 对接口的转换 是因为有参数不是string吗?不是utf-8吗?汉字需要转码 urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//项目里有cell上点赞按钮点赞的block回调 有选择学校的下一页选择返回回调数据 有公用方法里的权限接口数据回调
//我才发现项目里添加了UITextView的plascehould方法 具体是这个UITextView+placeholder.m 在General-Catogery文件里 所以之前自己给加的placehould就不需要了 也就不需要写textView的delegate了 想看原来的自己写的delegate的textView的placehould 就看备份
//百度地图添加标注时 位置偏移的话 可以添加下边这两句代码 使用gps坐标将原坐标coor更精确一下成baiduCoor添加标注位置 写这两句代码 必须引入头文件 #import <BaiduMapAPI_Utils/BMKGeometry.h> 具体可参考签到 SignInViewController.m 或者校园导游部分 CampusGuideViewController.m 和 CampusManageMapViewController.m
// NSDictionary *dict = BMKConvertBaiduCoorFrom(coor,BMK_COORDTYPE_GPS);
// CLLocationCoordinate2D baiduCoor = BMKCoorDictionaryDecode(dict);
//UITableView的style是UITableViewStylePlain时 section之间的header或者footer如果存在 在上拉或者下拉刷新的时候 header或者footer会跟随tableview跳动一下 覆盖cell 很难看 这时候的解决办法是 重写header或者footer的返回UIView的方法 例如:
//- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
// UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, mScreenWidth, 10)];
// view.backgroundColor = mRGBColor(245, 245, 245);
// return view;
//} //或者还有一个办法 就是控制tableview的content 例如:
//- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
// CGFloat sectionHeaderHeight = 10;
// if (scrollView.contentOffset.y<=sectionHeaderHeight&&scrollView.contentOffset.y>=0) {
// scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);
// } else if (scrollView.contentOffset.y>=sectionHeaderHeight) {
// scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0);
// }
//}
//网络请求类中 添加了用户状态异常登出的逻辑 大概的逻辑就是 每个请求方法中返回token错误的时候就调用系统方法退出登录 并提示
大学首页有 防止按钮快速点击造成多次响应的避免方法 切换学校的点击方法
友盟的qq分享的url不能带http:// 我去 这个问题困扰了我辣么久
//必须写这个方法 才能左滑cell弹出两个以上的按钮
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
[self setEditing:false animated:true];
}
在通用方法的.m里 有获取权限的接口方法 里边有将接口的请求数据回调的block block写在方法名里
//添加标注时 位置偏移的话 可以添加下边这两句代码 使用gps坐标添加标注位置 写这两句代码 必须引入头文件 #import <BaiduMapAPI_Utils/BMKGeometry.h>
// NSDictionary *dict = BMKConvertBaiduCoorFrom(coor,BMK_COORDTYPE_GPS);
// CLLocationCoordinate2D baiduCoor = BMKCoorDictionaryDecode(dict);
//把校园导游部分的中心坐标管理部分 的中心坐标列表 与 添加中心坐标页面 都有大的改动 因为现在定位 不需要自己手动定位了 程序内部有实时定位信息 列表页的locSevers 包括location都注掉了 与添加页的交互 跳转方法 那里 本来是传递定位到的经纬度的 现在把两个属性注掉了 不传递了 直接到页面去取最新的位置 逻辑变动较大 之前的备份应该是老版本 如果之后单独使用 可以查看之前的老版本
//真机编译 出错 no suitable image found 因为证书变动 清一下项目就行 clean
//用到定位的地方都修改了 用了globl里的方法 项目初始不停获取定位 所以不用自己获取位置 改了很多 之后定位出现问题 可以查看原文件备份 百度地图的manage 项目中有两套key 把不用的那套代码中有的地方都屏蔽了 不然影响globl中的定位 因为用了两套manage 进入第二套的页面的时候 把glbol中的manage就等于是覆盖了 反向geo失败 所以定位就失效了
//应用交通安全已经阻止了明文的HTTP(http://)资源负载,因为它是不安全的。 现在推荐的是https请求 要支持http 在info.plist中 配置一个字典元素NSAppTransportSecurity 这下边有一个键值对 NSAllowsArbitraryLoads boolean型的 YES
//城市选择列表demo 原版的就是云里的 对UI和线程有改动的修改版在圈圈-商户项目中 城市选择列表 效果很好
//简单开一个子线程操作
dispatch_async(dispatch_get_global_queue(0, 0), ^{
// 处理耗时操作的代码块...
//通知主线程刷新
dispatch_async(dispatch_get_main_queue(), ^{
//回调或者说是通知主线程刷新,
});
});
//商户端的外卖详情页面 用了弹出框带两个输入框的控件 如果需要可以继续自定义修改
//发布活动页面有很对对时间 NSDate的操作
//周边商家信息 咨询block 筛选block
//管理者入口的模块动态配置模块 有各种长按拖动 选择学校模块的逻辑也可以参考一下 特别是多选
//[choiceIndexArr containsObject:[NSString stringWithFormat:@"%d", i]] 数组包含某元素
//周边商家商品列表页面 两个controller联动的时候 用到了下边的方法 只为当前controller添加另一个controller的view 并且保证子controller的代理等方法都会调用
BussinessGoodsListController *goodsListController = [[BussinessGoodsListController alloc] init];
[self addChildViewController:goodsListController];
[self.view addSubview:goodsListController.view];
//隐藏返回按钮
self.navigationItem.leftBarButtonItem = nil;//隐藏根controller的返回
[self.navigationItem setHidesBackButton:YES];//隐藏系统的
//教职工信息编辑里 头像查看
[UIApplication sharedApplication].idleTimerDisabled = TRUE;
如果没有必要的话,一定不要添加,因为这句代码的意思是:不允许你的app自动锁屏,这个一般是在视频或者音频app里才能用到,不然太费电,苹果审核也许会因为这个拒绝你的app
//section-商圈-商圈新UI-商品列表页 BusinessPerGoodsListController 和 BussinessGoodsListController 两个页面是双tableview列表联动效果 简单的展示
//活动报名人员信息列表页 有segmentControl的标题随便变的方法 一走请求就更改segmentControl各个标题上的数字 并且这个页面与 人员管理部分的许多页面 都有cell左滑 支持iOS8的写法
//在商圈 周边列表页 BusinessPeripheryViewController.m的cellForRow方法里 和 PerihgeryCell.m的setter方法里 对一个downView的操作 影响cell重用的问题的解决办法 因为这个downView是在setter方法里初始化的 如果是在init方法里初始化 就没这个问题
//这个downView为什么放在setter方法里初始化 过了太久 忘记了 可能是因为这个view是动态加载的 有的cell有 有的没有 如果是这个原因 放在这里初始化的话
//就必须这样写 而且配合tableView的cellForRow 赋值方法了里的操作 才能排除重用的问题 可以试试问题的效果与原因
//这个downView为什么放在setter方法里初始化 过了太久 忘记了 可能是因为这个view是动态加载的 有的cell有 有的没有 如果是这个原因 放在这里初始化的话
//这个downView必须这样写 而且配合tableView的自定义cell的set方法里的操作 才能排除重用的问题 可以试试问题的效果与原因
//set之前就remove掉 set方法走完之后 如果是应该在的 那就再加回来 cell的set方法里 该怎么写还怎么写
获取接口0 1数据 要做成bool型 [dict[@"hasMembership"] boolValue]; swich按钮状态上传 @(swich.on) bool型上传 @(YES)
周边 筛选页面有选中筛选条件后的数据回调block 包括标签的显示与重用
用这个 [[NSNotificationCenter defaultCenter ] addObserver : self selector : @selector (layoutControllerSubViews) name : UIApplicationDidChangeStatusBarFrameNotification object : nil ]; 监听到statusBar的状态有变化 比如说 打电话啊 语音视频啊 这时候可能页面错乱 相应的修改页面
for (int i = 0; i < self.navigationController.viewControllers.count; i++) {
if ([[self.navigationController.viewControllers objectAtIndex:i] isKindOfClass:[addOfficialViewController class]]) {
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:i] animated:YES];
}
}
//遍历navigation pop返回到指定页面
//返回两层 或者可以直接赋值数字 直接返回到确定的第几层
int index = (int)[[self.navigationController viewControllers] indexOfObject:self];
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:(index -2)] animated:YES];
折扣卡详情与订单详情里都有生成二维码的方法
商品详情介绍页面有饼状图的简单使用
//UITextView点击return的方法
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
if ([text isEqualToString:@"\n"]){ //判断输入的字是否是回车,即按下return
//在这里做你响应return键的代码
[[[UIApplication sharedApplication]keyWindow] endEditing:YES];
return NO; //这里返回NO,就代表return键值失效,即页面上按下return,不会出现换行,如果为yes,则输入页面会换行
}
return YES;
}
//校园导游详情页的 图片撑大
[self.bigImageView setContentScaleFactor:[[UIScreen mainScreen] scale]];
self.bigImageView.contentMode = UIViewContentModeScaleAspectFill;
self.bigImageView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
self.bigImageView.clipsToBounds = YES;
//如果需要滑动收键盘 就把这玩意打开 如果点击输入框 弹起来的页面超过80 就只能比80更大 下边这方法里的80 超过点击输入框时弹起的页面contentInset就行
//- (void)scrollViewDidScroll:(UIScrollView *)scrollView
//{
// NSLog(@"%f", scrollView.contentOffset.y )
// ;
// if (scrollView.contentOffset.y > 80 || scrollView.contentOffset.y < -80) {
//
// [[[UIApplication sharedApplication] keyWindow] endEditing:YES];
// }
//}
//导游详情的更多按钮 点击弹出的小球 效果不错
//商圈的首页的右上角的搜索 点击到BussinessSrarchViewController页面中的 搜索功能还是不错滴 可以参考
//指定一个view的某个角或多个角为圆角
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:titleVeiw.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(10, 10)];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.frame = titleVeiw.bounds;
maskLayer.path = maskPath.CGPath;
titleVeiw.layer.mask = maskLayer;
//在发布活动时选择图片的时候 剪切图片的那个类里 有个方法 //修改拍摄照片的水平度不然会旋转90度 - (UIImage *)fixOrientation:(UIImage *)aImage 特别好用 防止图片旋转的问题
//移除View上的全部子view 遍历移除
[self.downToolView.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
[obj removeFromSuperview];
}];
//遍历数组
[GLOBAL.myAllPermissionArr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ( [obj[@"id"] isEqualToString:@"002001001"] )
{
showJingGao = YES;
}
}];
// https://github.com/AnyRTC/RTMPCHybridEngine-IOS 直播连麦 开放项目 github地址
//圈圈-商户项目中的 外卖详情有个MyAlertView 自定义的alert带俩输入框 样式可自定义
//强制转屏的方法
- (void)orientationToPortrait:(UIInterfaceOrientation)orientation {
SEL selector = NSSelectorFromString(@"setOrientation:");
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
[invocation setSelector:selector];
[invocation setTarget:[UIDevice currentDevice]];
int val = orientation;
[invocation setArgument:&val atIndex:2];//前两个参数已被target和selector占用
[invocation invoke];
}
这样调用
if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
[self orientationToPortrait:UIInterfaceOrientationPortrait];
}
//圈子-controller-扩展-语音控制-有语音识别转文字的类 用block在服务大厅首页使用了 使用的是聚合数据 参考 https://www.juhe.cn/docs/api/id/134
//当前ViewController是否正在显示
if (self.isViewLoaded && self.view.window) {}
一级一级遍历字典
NSString * tmpKey;
NSInteger tmpRow = 0;
for ( int i = 0 ; i < [_contactDic allKeys].count; i++) {
NSString * key = [_contactDic allKeys][i];
for ( NSInteger j = 0 ; j < [_contactDic[key] count]; j++) {
ChatUserBuddy * obj = _contactDic[key][j];
if ( [obj.userId isEqualToString: buddy.userId] ) {
tmpKey = key;
tmpRow = j;
break;
}
}
}
CollegeDetailVC.m页面中有switch 数据加载的逻辑也可以参考一下
//我管理的签到的详情页面有拖动改变tableView的frame的逻辑 就是tableView加在页面下半部分 在scrollViewDidScroll的方法里 根据tableView的拖动距离来界定 距离超过某一个临界值就用view动画修改tableView的frame
//判断一个字符串是否全是由空格组成
[[_LostNameRight.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0
//导游详情的一个cell上的button的点击事件 通过button取找到cell
- (void)commentListUserImage:(UIButton *)button
{
UIView *v = [button superview];//获取父类view
UITableViewCell *cell = (SchoolDetailCell *)[v superview];//获取cell
NSIndexPath *indexPathAll = [self.campusDetailListTable indexPathForCell:cell];//获取cell对应的section
UserDetailViewController *control = [[UserDetailViewController alloc] init];
control.buddyID = [[[[[_dataListArr objectAtIndex:indexPathAll.section] objectForKey:@"comments"] objectAtIndex:indexPathAll.row] objectForKey:@"user"] objectForKey:@"id"];
[self.navigationController pushViewController:control animated:YES];
}
//把两张图片合并为一张 导游的景点标注有个背景图一样 里边的图标不同
- (UIImage *)addImage:(NSString *)imageName1 withImage:(UIImage *)image2 {
UIImage *image1 = [UIImage imageNamed:imageName1];
UIGraphicsBeginImageContext(CGSizeMake(image1.size.width * 2, image1.size.height * 2));
[image1 drawInRect:CGRectMake(0, 0, image1.size.width * 2, image1.size.height * 2)];
[image2 drawInRect:CGRectMake(5, 5, image1.size.width * 2 - 10, image1.size.width * 2 - 10)];
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resultingImage;
}
//如果button始终设置不上让图片适应按钮的大小 自动切割显示 那试试这个 注意button的设置图片方法 是直接添加图片 不是setbackimage
[btn setContentScaleFactor:[[UIScreen mainScreen] scale]];
btn.imageView.contentMode = UIViewContentModeScaleAspectFill;
注意cell.clipsToBounds = YES;的使用