2015.4.20一
1,xcode6第三方庫(kù)導(dǎo)入問(wèn)題,現(xiàn)在需要通過(guò) “Group”的方式 導(dǎo)入才能
2015.4.21二
1,UIView覆蓋全屏幕(包括導(dǎo)航欄)覆蓋導(dǎo)航欄和Tabbar
[[UIApplication sharedApplication].keyWindow addSubview:<#(UIView *)view#>]
2,初始化視圖在-(void)loadView初始化
2015.4.22三
QFQ
1,
1)數(shù)據(jù)請(qǐng)求?老的用:HttpTool新的用:HttpClient
HttpClient 用的隊(duì)列的方式
2)Sweep:掃書(shū)Side:身邊My:我的More:更多
3)1》Table數(shù)據(jù)請(qǐng)求返回的數(shù)據(jù)
2》封裝一個(gè)BookInfo類,類中有獲取數(shù)據(jù)方法,例:
//獲取最受歡迎圖書(shū)館列表
+ (NSArray*)welcomeBookListWithArea:(NSInteger)iArea dis:(NSInteger)iDis pageIndex:(int)iPageIndex pageSize:(int)iPageSize useLocation:(BOOL)bUseLocation;
3》填充TableViewCell時(shí),取出需要的信息
2,文本框提示文字顏色
[_txtFile setValue:[UIColor whiteColor] forKeyPath:@"_placeholderLabel.textColor"];
3,通知中心,記得dealloc
B.m
發(fā)送通知
[[NSNotificationCenter defaultCenter] postNotificationName:@'ChangeNameNotification' object:self userInfo:@{@'name':self.nameTextField.text}];
A.m
注冊(cè)一個(gè)通知,來(lái)調(diào)用發(fā)生事件
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(ChangeNameNotification:) name:@'ChangeNameNotification' object:nil];
刪除通知
[[NSNotificationCenter defaultCenter] removeObserver:self];
調(diào)用,顯示
-(void)ChangeNameNotification:(NSNotification*)notification{
NSDictionary *nameDictionary = [notification userInfo];
self.nameLabel.text = [nameDictionary objectForKey:@'name'];
}
4,.mm文件,如果用到了C++,需要改為mm
5,輕量級(jí)本地?cái)?shù)據(jù)儲(chǔ)存: NSNumber(Integer、Float、Double),NSString,NSDate,NSArray,NSDictionary,BOOL類型
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
id sLibraryID = [userDefaults objectForKey:@“LibraryId”];//讀取數(shù)據(jù)
[userDefaults setValue:@“” forKey:@“CardId”]; //存入數(shù)據(jù)
/UsersLibrary/Application Support/iPhoneSimulator/4.1/Applicati*****/29788E40-AF47-45A0-8E92-3AC0F501B7F4/,(這個(gè)是應(yīng)用程序?qū)?yīng)在mac上的位置)
這個(gè)下面有/Library/Prefereces,里面有個(gè)plist文件,存儲(chǔ)的就是你的userDefaults
,編程語(yǔ)言這種東西,好比國(guó)語(yǔ),學(xué)習(xí)國(guó)語(yǔ)一開(kāi)始先從26的字母學(xué)起,然后到拼音,到漢字,然后進(jìn)入到詞組階段,開(kāi)始造句,每個(gè)人對(duì)詞語(yǔ)的敏感度不同,然后寫(xiě)出來(lái)的文字也不一樣。有些生動(dòng)美麗,有些生澀難懂。編程就是如此,到了詞組階段,自然就可以造出各種各樣的語(yǔ)句。
2015.4.23四
1,照片壓縮
2,關(guān)于枚舉的要點(diǎn)
1)應(yīng)該用枚舉來(lái)表示狀態(tài)機(jī)的狀態(tài)、傳遞給方法的選項(xiàng)以及狀態(tài)碼等值,給這些值起個(gè)易懂的名字
2)如果把傳遞給某個(gè)方法的選項(xiàng)表示為枚舉類型,而多個(gè)選項(xiàng)又可同時(shí)使用,那么就將各選項(xiàng)值定義為2的冪,以便通過(guò)按位或操作將其組合起來(lái),使用 NSTimer 的時(shí)候,在視圖即將消失的時(shí)候,如果沒(méi)有置為nil ,返回上一個(gè)視圖的時(shí)候會(huì)卡屏
3)用NS_ENUM與NS_OPTIONS宏來(lái)定義枚舉類型,并指明其底層數(shù)據(jù)類型。這樣做可以確保枚舉是用開(kāi)發(fā)者所選的底層數(shù)據(jù)類型實(shí)現(xiàn)出來(lái)的,而不會(huì)采用編譯器所選的類型
4)在處理枚舉類型的switch語(yǔ)句中不要實(shí)現(xiàn)default分支。這樣的話,加入新枚舉之后,編譯器就會(huì)提示開(kāi)發(fā)者:switch語(yǔ)句并未處理所有枚舉
2015.4.28二
1,delegate在視圖即將消失的時(shí)候應(yīng)該釋放掉,delegate = nil;
2,TextField文本框的縮進(jìn),
textField.leftView = clearSpaceView
textField.leftViewMode = UITextFieldModAlways
2015.5.15五
1,自定義導(dǎo)航,手勢(shì)返回上一個(gè)視圖控制器
2,數(shù)據(jù)請(qǐng)求的優(yōu)化:
頭部刷新時(shí),請(qǐng)求回來(lái)的數(shù)據(jù)和已存在的數(shù)據(jù),判斷第一個(gè)對(duì)象,如果相同,說(shuō)明更新內(nèi)容一樣,就不需要重新加載;
尾部刷新時(shí),請(qǐng)求回來(lái)的數(shù)據(jù)和已存在的數(shù)據(jù),判斷兩組數(shù)據(jù)的最后一個(gè)對(duì)象是否相同,如果相同,說(shuō)明更新內(nèi)容一樣,同樣不需要加載
3,內(nèi)存警告處理,根據(jù)需求決定優(yōu)先級(jí),Crash還是將當(dāng)前頁(yè)面的控件和數(shù)據(jù)置為nil,
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_6_0
#endif
4,判斷頁(yè)數(shù)如:每頁(yè)10條數(shù)據(jù)iPageIndex = count % 10 == 0 ? count / 10 + 1 : count / 10 + 2
5,二維碼掃描,沒(méi)有設(shè)置掃描的范圍,當(dāng)二維碼全部進(jìn)入相機(jī),當(dāng)時(shí)沒(méi)有全部進(jìn)入限制的相框時(shí),掃描就完成了,影響客戶體驗(yàn)
2015.5.26二
1,在使用NSTimer的時(shí)候,在視圖即將消失的時(shí)候,如果沒(méi)有置為nil,在返回上個(gè)視圖的時(shí)候會(huì)卡屏
[_timer invalidate];//暫停NSTimer
_timer = nil;
2,NSTimer 關(guān)閉和打開(kāi)方法
//關(guān)閉定時(shí)器
[_timer setFireDate:[NSDate distantFuture]];
//打開(kāi)定時(shí)器
[_timer setFireDate:[NSDate distantPast]];
3,NSTimer 在有 UIScrollView 的時(shí)候記得將NSTimer放入混合模式,原因是因?yàn)樘O(píng)果手機(jī)在執(zhí)行代碼的時(shí)候優(yōu)先將所有性能放在UI上,優(yōu)先執(zhí)行UI操作,然后才執(zhí)行其他操作。
2015.5.27三
1,在xcode6 中導(dǎo)入 MJRefresh第三方庫(kù), 會(huì)報(bào)錯(cuò) unknown type’NSString’…
原因:由于xcode6取消了 .pch 文件,所以沒(méi)有導(dǎo)入Foundation.framework 和 UIKit.framework 框架
解決方法:在MJRefreshConst.m頭部加上
#import
#import
2,第三方 SDImage
報(bào)錯(cuò):objc_msgSend(self.beginRefreshingTaget, self.beginRefreshingAction, self);
Too many arguments to function call, expected 0, have 3
解決方案:
選中項(xiàng)目 - Project - Build Settings - ENABLE_STRICT_OBJC_MSGSEND將其設(shè)置為 NO 即可
——————————
導(dǎo)入第三方SDImage 導(dǎo)入框架
1.導(dǎo)入ImageIO.framework
2.導(dǎo)入MapKit.framwork
2015.5.28四
1,設(shè)置UIButton在高亮狀態(tài)時(shí)的背景色,可以通知實(shí)例化一個(gè)純顏色的UIImage
#pragma mark -實(shí)例化一個(gè)純顏色的UIImage
- (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size
{
CGRect rect = CGRectMake(0, 0, size.width, size.height);
//創(chuàng)建一個(gè)默認(rèn)的位圖
UIGraphicsBeginImageContext(rect.size);
//設(shè)置上下文
CGContextRef context = UIGraphicsGetCurrentContext();
//填充顏色
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
//接收返回的UIImage
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
2015.5.29五
1, 公用一個(gè)ScrollView、TableView等,在視圖切換的時(shí)候,如何記錄當(dāng)前坐標(biāo),以便切換視圖時(shí)能返回之前所在位置
解決方案:
1)不用同一個(gè) ScrollView, 封裝成兩個(gè)以上的View
2)調(diào)用UIScrollViewDelegate 的函數(shù)
#pragma mark - UIScrollViewDelegate
//Scroll停止?jié)L動(dòng)就會(huì)調(diào)用這個(gè)函數(shù)
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
//NSLog(@"當(dāng)前Frame(%@)",NSStringFromCGRect(scrollView.frame));
//NSLog(@"當(dāng)前大小(%@)",NSStringFromCGSize(scrollView.contentSize));
//判斷當(dāng)TableView處于刷新?tīng)顟B(tài)時(shí),不記錄當(dāng)前TableView的坐標(biāo)
//
if (scrollView.contentSize.height - CGRectGetHeight(scrollView.frame) <= scrollView.contentOffset.y || scrollView.contentOffset.y >= 0) {
//NSLog(@"------(%@)--------",@(scrollView.contentOffset.y));
if (_CurrentTypeIsThemeOrApply == ISTHEME) {
_currentThemeY = _themeTableView.contentOffset.y;
} else {
_currentAlApplyY = _themeTableView.contentOffset.y;
}
}
}
2,同時(shí)點(diǎn)擊兩個(gè)以上的按鈕,觸發(fā)事件,會(huì)相繼 PUSH 各自的ViewController.
解決方法:
1)控制可點(diǎn)擊的觸摸數(shù)量;
2)限制按鈕事件,聲明一個(gè)BOOL的常量設(shè)為NO,控制事件只允許發(fā)生一次,在事件發(fā)生完之后改成YES
2015.6.9二
1, 監(jiān)聽(tīng)文本框輸入有兩種方法。
1)使用UITextFeildDelegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
//延遲0.2秒執(zhí)行事件
[self performSelector:@selector(textChange) withObject:nil afterDelay:0.2];
return YES;
}
2)通知中心
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:nil]
2,注冊(cè),忘記密碼代碼優(yōu)化
當(dāng)所有文本框都輸入字符時(shí),注冊(cè)按鈕才可點(diǎn)擊,樣式為可點(diǎn)擊樣式,否則不可點(diǎn)擊,又換一種樣式
因?yàn)槭褂肬ITextFieldDelegate中監(jiān)聽(tīng)文本框輸入,每次輸入字符都會(huì)調(diào)用一次代理函數(shù),每次調(diào)整按鈕高亮狀態(tài)時(shí),都會(huì)不斷的實(shí)例化新的UIImage,增加內(nèi)存,解決方法就是有一個(gè)全局的UIImage,然后利用延遲加載的方式,這樣一旦判斷存在這個(gè)UIImage,就只會(huì)用到一個(gè)UIImage
2015.6.10三
1,如何讓UITabbar界面在PUSH進(jìn)一個(gè)ViewController隱藏,然后在POP回來(lái)的時(shí)候顯示。
解決方法:
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:customTabbar];
nav.navigationBar.hidden = YES;
[self.window setRootViewController:nav];
2015.6.11四
1,修改狀態(tài)欄文字顏色,重寫(xiě)返回狀態(tài)欄方法
// 如果調(diào)用[UIApplication sharedApplication] set ..的方法用不了可以用下面的重寫(xiě)方法
-(UIStatusBarStyle)preferredStatusBarStyle
{
if (_scrollMain.contentOffset.y>150) {
_currentStatusBayStyle = UIStatusBarStyleDefault;
}
else {
_currentStatusBayStyle = UIStatusBarStyleLightContent;
}
return _currentStatusBayStyle;
}
[self setNeedsStatusBarAppearanceUpdate];
// plist,設(shè)置
View controller-based status bar appearanceNO
2015.6.11五
1,一般項(xiàng)目中,在加載頁(yè)的時(shí)候一般不會(huì)出現(xiàn)狀態(tài)欄,所有一般隱藏狀態(tài)欄(在“加載頁(yè)的時(shí)候”隱藏,等到主界面還得顯示出來(lái))
2015.6.17三
1,枚舉與宏的區(qū)別
宏和枚舉之間的差別主要在作用的時(shí)期和存儲(chǔ)的形式不同,宏是在預(yù)處理的階段進(jìn)行替換工作的,它替換代碼段的文本,程序運(yùn)行的過(guò)程中宏已不存在了。而枚舉是在程序運(yùn)行之后才起作用的,枚舉常量存儲(chǔ)在數(shù)據(jù)段的靜態(tài)存儲(chǔ)區(qū)里。宏占用代碼段的空間,而枚舉除了占用空間,還消耗CPU資源
2015.7.1三
1,使用UITableView布滿全屏?xí)r,當(dāng)界面即將消失時(shí),會(huì)自動(dòng)下移20像素,這是由于代理引起的,需要設(shè)置粘稠,或者在界面即將消失時(shí)重新設(shè)置Y為-20.
2015.7.6一
1,UITableViewCell在全屏?xí)r,Cell無(wú)法填充到狀態(tài)欄,會(huì)自動(dòng)偏移y坐標(biāo),解決方法
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (scrollView.tag == 1) {
CGFloat sectionHeaderHeight = -20;
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(0, 0, 0, 0);
}
}
}
2015.7.24一
1,通知中心沒(méi)有dealloc會(huì)導(dǎo)致的問(wèn)題
1)第一次實(shí)例化界面,通知中心并沒(méi)有調(diào)用NSNotification的函數(shù)
2,檢查版本更新
NSString* http = @"http://itunes.apple.com/lookup?id=924306089";
[HttpClient GetAsync:http parameters:nil needCache:0 completion:^(id response, NSHTTPURLResponse *urlResponse, NSError *error) {
if (error||response == nil) {
block(nil);
return ;
}
NSDictionary* responseDict = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableContainers error:&error];
if (responseDict == nil) {
block(nil);return ;
}
ResultInfo* result = [ResultInfo new];
result.iRet = 0;
NSDictionary* resultDict = [responseDict[@"results"] firstObject];
NSString*version = resultDict[@"version"];
NSString* currentVersion = APPVersion;
version = [version stringByReplacingOccurrencesOfString:@"." withString:@""];
currentVersion = [version stringByReplacingOccurrencesOfString:@"." withString:@""];
BOOL bNeedUpdate = [version integerValue] > [currentVersion integerValue] ? YES:NO;
NSDictionary* dict = @{@"NewVersion":version,@"NeedUpdate":[NSNumber numberWithBool:bNeedUpdate],@"UpdateUrl":resultDict[@"trackViewUrl"]};
result.oRet = dict; //為Yes表示需要更新
block(result);
2015.8.24一
1, ViewController上可以繼續(xù)放ViewController,屏幕上切換不同類型,可以通過(guò)這種方式實(shí)現(xiàn)