iOS開(kāi)發(fā)日記-1

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)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.badgeVaule氣泡提示 2.git終端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夾內(nèi)容...
    i得深刻方得S閱讀 4,987評(píng)論 1 9
  • *7月8日上午 N:Block :跟一個(gè)函數(shù)塊差不多,會(huì)對(duì)里面所有的內(nèi)容的引用計(jì)數(shù)+1,想要解決就用__block...
    炙冰閱讀 2,752評(píng)論 1 14
  • 1、禁止手機(jī)睡眠[UIApplication sharedApplication].idleTimerDisabl...
    DingGa閱讀 1,212評(píng)論 1 6
  • { 11、核心動(dòng)畫(huà) 需要簽協(xié)議,但是系統(tǒng)幫簽好 一、CABasicAnimation 1、創(chuàng)建基礎(chǔ)動(dòng)畫(huà)對(duì)象 CAB...
    CYC666閱讀 1,705評(píng)論 2 4
  • 美工一般會(huì)給我們出16進(jìn)制的顏色值,就需要一個(gè)方法來(lái)實(shí)現(xiàn)了 1.我是這么實(shí)現(xiàn)的, 給UIColor寫(xiě)個(gè)分類, 然后...
    十一遙閱讀 1,754評(píng)論 1 0

友情鏈接更多精彩內(nèi)容