拖進來的工程 要先編譯一遍 在主工程的build phase里添加副工程對應的.a文件 在header path中添加對應的路徑
CMB項目里 從PageViewController里的shouldStartLoadWithRequest方法中看出 好像是用的截獲URL來進行OC與JS交互的
DASSC項目里 LuanchViewController里的didDownloadData方法中看出 好像是獲取到數(shù)據(jù)后 全部以對應的NSUserDefaults形式存在本地
打開Finder,按下shift+cmd+g腔召,輸入 “/etc/hosts”(引號內(nèi)的內(nèi)容) 再按回車钢属,你就找到了Mac的host文件
適配iPhoneX的時候 如果模擬器正常 真機上下有黑邊 lunanch圖片的適配 這時候 試試使用jpg圖片
打包時候報錯Command /bin/sh failed with exit code 1? ? 可以試試看 第三方庫里有么可以問題 包括xib文件 可能的原因是第三方庫缺少xib文件
BussinessGoodsModel? 這個Model可以作為Model的基類 創(chuàng)建Model 可以參考這個類 或者 Account比這個類更好的是DBBMobo中的HSTIndex類 這個類 一個是initWithDic 一個是initWithCoder
// 在圈子的Controller的通訊錄的ContactsViewController.m中 f搜索功能做的很完美 以后如果需要做搜索 可以參考 在發(fā)布活動的頁面 有定位并且 詳情地圖拖動地圖獲取附近信息的頁面
//機構(gòu)管理 人員管理部分 所有頁面的 有學號工號的地方 都把長度由原來的-10 改成現(xiàn)在的-3了 為了讓七位的號可以不折行
//導游詳情頁面的點擊圖片放大的控件根據(jù)新鮮事詳情或者辛≌荆花校草詳情里的stbrowsphoto改變一下? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 形∨矗花校草校景新鮮事四個模塊的所有頁面的本地化數(shù)據(jù)都暫時注掉了 擔心引起不必要的錯誤
//1齿穗、跳出整個方法用return; 2吠昭、中止循環(huán)用break; 3喊括、跳出本次循環(huán)用continue;? 數(shù)據(jù)請求的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);
//目前首頁這里有幾處問題 登錄時 沒有發(fā)送登錄的通知 注銷時也沒有發(fā)送通知 用戶自己修改了自己的學校也沒有發(fā)送通知 測試如果發(fā)送通知
//如果要隱藏一個cell 可以把cell高度賦值的那個方法里 把這條cell的返回高度 返回成0.00000001; //是不是不打開imageView的userInteractionEnabled的話 imageView加載button上 不影響button的點擊 因為完全可以透過imageView來點擊到button
//校景詳情改了 調(diào)接口的時候 對接口的轉(zhuǎn)換 是因為有參數(shù)不是string嗎矢棚?不是utf-8嗎郑什?漢字需要轉(zhuǎn)碼 urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//項目里有cell上點贊按鈕點贊的block回調(diào) 有選擇學校的下一頁選擇返回回調(diào)數(shù)據(jù) 有公用方法里的權(quán)限接口數(shù)據(jù)回調(diào)
//我才發(fā)現(xiàn)項目里添加了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);
//? ? }
//}
//網(wǎng)絡請求類中 添加了用戶狀態(tài)異常登出的邏輯 大概的邏輯就是 每個請求方法中返回token錯誤的時候就調(diào)用系統(tǒng)方法退出登錄 并提示
大學首頁有 防止按鈕快速點擊造成多次響應的避免方法 切換學校的點擊方法
友盟的qq分享的url不能帶http://? ? 我去 這個問題困擾了我辣么久
//必須寫這個方法 才能左滑cell彈出兩個以上的按鈕
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
[self setEditing:false animated:true];
}
在通用方法的.m里 有獲取權(quán)限的接口方法 里邊有將接口的請求數(shù)據(jù)回調(diào)的block block寫在方法名里
//添加標注時 位置偏移的話 可以添加下邊這兩句代碼 使用gps坐標添加標注位置 寫這兩句代碼 必須引入頭文件 #import <BaiduMapAPI_Utils/BMKGeometry.h>
//? ? ? ? ? NSDictionary *dict = BMKConvertBaiduCoorFrom(coor,BMK_COORDTYPE_GPS);
//? ? ? ? ? CLLocationCoordinate2D baiduCoor = BMKCoorDictionaryDecode(dict);
//把校園導游部分的中心坐標管理部分 的中心坐標列表 與 添加中心坐標頁面 都有大的改動 因為現(xiàn)在定位 不需要自己手動定位了 程序內(nèi)部有實時定位信息? 列表頁的locSevers 包括location都注掉了 與添加頁的交互 跳轉(zhuǎn)方法 那里 本來是傳遞定位到的經(jīng)緯度的 現(xiàn)在把兩個屬性注掉了 不傳遞了 直接到頁面去取最新的位置 邏輯變動較大 之前的備份應該是老版本 如果之后單獨使用 可以查看之前的老版本
//真機編譯 出錯 no suitable image found 因為證書變動 清一下項目就行 clean
//用到定位的地方都修改了 用了globl里的方法 項目初始不停獲取定位 所以不用自己獲取位置 改了很多 之后定位出現(xiàn)問題 可以查看原文件備份 百度地圖的manage 項目中有兩套key 把不用的那套代碼中有的地方都屏蔽了 不然影響globl中的定位 因為用了兩套manage 進入第二套的頁面的時候 把glbol中的manage就等于是覆蓋了 反向geo失敗 所以定位就失效了
//應用交通安全已經(jīng)阻止了明文的HTTP(http://)資源負載,因為它是不安全的。 現(xiàn)在推薦的是https請求 要支持http 在info.plist中 配置一個字典元素NSAppTransportSecurity 這下邊有一個鍵值對 NSAllowsArbitraryLoads boolean型的 YES
//城市選擇列表demo 原版的就是云里的 對UI和線程有改動的修改版在圈圈-商戶項目中 城市選擇列表 效果很好
//簡單開一個子線程操作
dispatch_async(dispatch_get_global_queue(0, 0), ^{
// 處理耗時操作的代碼塊...
//通知主線程刷新
dispatch_async(dispatch_get_main_queue(), ^{
//回調(diào)或者說是通知主線程刷新蒲肋,
});
});
//商戶端的外賣詳情頁面 用了彈出框帶兩個輸入框的控件 如果需要可以繼續(xù)自定義修改
//發(fā)布活動頁面有很對對時間 NSDate的操作
//周邊商家信息 咨詢block 篩選block
//管理者入口的模塊動態(tài)配置模塊 有各種長按拖動 選擇學校模塊的邏輯也可以參考一下 特別是多選
//[choiceIndexArr containsObject:[NSString stringWithFormat:@"%d", i]] 數(shù)組包含某元素
//周邊商家商品列表頁面 兩個controller聯(lián)動的時候 用到了下邊的方法 只為當前controller添加另一個controller的view 并且保證子controller的代理等方法都會調(diào)用
BussinessGoodsListController *goodsListController = [[BussinessGoodsListController alloc] init];
[self addChildViewController:goodsListController];
[self.view addSubview:goodsListController.view];
//隱藏返回按鈕
self.navigationItem.leftBarButtonItem = nil;//隱藏根controller的返回
[self.navigationItem setHidesBackButton:YES];//隱藏系統(tǒng)的
//教職工信息編輯里 頭像查看
[UIApplication sharedApplication].idleTimerDisabled = TRUE;
如果沒有必要的話蘑拯,一定不要添加,因為這句代碼的意思是:不允許你的app自動鎖屏兜粘,這個一般是在視頻或者音頻app里才能用到申窘,不然太費電,蘋果審核也許會因為這個拒絕你的app
//section-商圈-商圈新UI-商品列表頁 BusinessPerGoodsListController 和 BussinessGoodsListController 兩個頁面是雙tableview列表聯(lián)動效果 簡單的展示
//活動報名人員信息列表頁 有segmentControl的標題隨便變的方法 一走請求就更改segmentControl各個標題上的數(shù)字? 并且這個頁面與 人員管理部分的許多頁面 都有cell左滑 支持iOS8的寫法
//在商圈 周邊列表頁? BusinessPeripheryViewController.m的cellForRow方法里 和 PerihgeryCell.m的setter方法里 對一個downView的操作 影響cell重用的問題的解決辦法 因為這個downView是在setter方法里初始化的 如果是在init方法里初始化 就沒這個問題
//這個downView為什么放在setter方法里初始化 過了太久 忘記了 可能是因為這個view是動態(tài)加載的 有的cell有 有的沒有 如果是這個原因 放在這里初始化的話
//就必須這樣寫 而且配合tableView的cellForRow 賦值方法了里的操作 才能排除重用的問題 可以試試問題的效果與原因
//這個downView為什么放在setter方法里初始化 過了太久 忘記了 可能是因為這個view是動態(tài)加載的 有的cell有 有的沒有 如果是這個原因 放在這里初始化的話
//這個downView必須這樣寫 而且配合tableView的自定義cell的set方法里的操作 才能排除重用的問題 可以試試問題的效果與原因
//set之前就remove掉 set方法走完之后 如果是應該在的 那就再加回來 cell的set方法里 該怎么寫還怎么寫
獲取接口0 1數(shù)據(jù) 要做成bool型 [dict[@"hasMembership"] boolValue];? swich按鈕狀態(tài)上傳 @(swich.on)? bool型上傳 @(YES)
周邊 篩選頁面有選中篩選條件后的數(shù)據(jù)回調(diào)block 包括標簽的顯示與重用
用這個? ? [[NSNotificationCenter defaultCenter ] addObserver : self selector : @selector (layoutControllerSubViews) name : UIApplicationDidChangeStatusBarFrameNotification object : nil ]; 監(jiān)聽到statusBar的狀態(tài)有變化 比如說 打電話啊 語音視頻啊 這時候可能頁面錯亂 相應的修改頁面
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返回到指定頁面
//返回兩層? 或者可以直接賦值數(shù)字 直接返回到確定的第幾層
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路鹰,不會出現(xiàn)換行贷洲,如果為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;
//在發(fā)布活動時選擇圖片的時候 剪切圖片的那個類里 有個方法 //修改拍攝照片的水平度不然會旋轉(zhuǎn)90度? - (UIImage *)fixOrientation:(UIImage *)aImage? 特別好用 防止圖片旋轉(zhuǎn)的問題
//移除View上的全部子view 遍歷移除
[self.downToolView.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
? ? [obj removeFromSuperview];
}];
//遍歷數(shù)組
[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帶倆輸入框 樣式可自定義
//強制轉(zhuǎn)屏的方法
- (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];//前兩個參數(shù)已被target和selector占用
[invocation invoke];
}
這樣調(diào)用
if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
[self orientationToPortrait:UIInterfaceOrientationPortrait];
}
//圈子-controller-擴展-語音控制-有語音識別轉(zhuǎn)文字的類 用block在服務大廳首頁使用了? 使用的是聚合數(shù)據(jù) 參考 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 數(shù)據(jù)加載的邏輯也可以參考一下
//我管理的簽到的詳情頁面有拖動改變tableView的frame的邏輯 就是tableView加在頁面下半部分 在scrollViewDidScroll的方法里 根據(jù)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;的使用