此貼會經(jīng)常更新添加新內(nèi)容,敬請關(guān)注!
首先給出iOS開發(fā)常用開源代碼和第三方庫:http://www.cocoachina.com/applenews/devnews/2013/0128/5622.html
視頻分享:
http://www.lanrenios.com/tutorials/basic/2012/1218/630.html
http://www.lanrenios.com/tutorials/basic/2013/0121/806.html
這是一個大神的博客,可以多多學(xué)習(xí):http://geeklu.com/
修改appid 信息:appleid.apple.com
蘋果開發(fā)者支持中心:40067108551
1、獲取info.plist文件內(nèi)容,名稱/版本號......
NSDictionary*progectInfo = [[NSBundlemainBundle]infoDictionary];
NSString*idst = [progectInfoobjectForKey:@"CFBundleIdentifier"]; ? ? ?// 獲取應(yīng)用標(biāo)識
Dlog(@"%@", idst);
2、NSLog宏定義
#ifdef DEBUG
#define Dlog(format, ...) NSLog(format, ##__VA_ARGS__)
#else
#define Dlog(format, ...)
#endif
3、UIImageView之上的UIButton默認(rèn)是不觸發(fā)事件的,加入一行代碼搞定:
UIImageView*bgView = [[UIImageViewalloc]initWithImage:[[UIImageimageNamed:@"sdf"]autorelease]];bgView.userInteractionEnabled=YES;
4、設(shè)置視圖不支持橫屏顯示,修改info-plist文件,直接上圖:
5、相冊照片選中后可以編輯大小/移動位置,修改選擇器:
imagePicker.allowsEditing=YES; 接著在代理方法中這樣獲得修改后的照片: UIImage*editedImage = [infoobjectForKey:UIImagePickerControllerEditedImage];
6、當(dāng)我們的應(yīng)用需要支持中文國際化時,比如打開相冊,菜單都是中文的.可以在PROJECT下添加,添加中文支持后infoPlist.strings會自動添加一個中文的空文件,直接上圖:
7、(1)顯示Mac隱藏文件的命令:defaults write com.apple.finder AppleShowAllFiles YES
隱藏Mac隱藏文件的命令:defaults write com.apple.finder AppleShowAllFiles NO
操作完之后要強制退出Finder并從新啟動。
(2)MAX刪除文件夾下的所有.svn文件
打開終端應(yīng)用;將準(zhǔn)備刪除的文件夾拖拽到終端,得到該文件夾的絕對路徑;
cd ?剛才得到的路徑,進入該文件夾;
執(zhí)行 ?rm -rf `find . -type d -name .svn` 命令;
注意這個符號 : “ ?` ?” ,在mac下先按 fn 鍵 再按 esc 下面的哪個鍵; 或則直接拷貝上面的命令
8、程序停止/間隔執(zhí)行:
(1)sleep(300);
(2)(1)[NSThread sleepForTimeInterval:5.0];
(3)[selfperformSelector:@selector(startupview)withObject:nilafterDelay:3];
9、隱藏iPhone通知欄
(1)application.statusBarHidden=YES;
(2)可以修改info.plist文件:
10、標(biāo)簽欄默認(rèn)高度是48寬度152(四個菜單時),TabBarItem的圖片尺寸是30X30,這個應(yīng)該是帶字的,不帶字@2x應(yīng)該是44比較好看,導(dǎo)航欄
/UISegmentedControl /?工具欄 / uitableviewcell的默認(rèn)高度都是44,狀態(tài)欄默認(rèn)高度是20.
11、UINavigationController和UITabBarController都是容器控制器,別打算給他們或他們的子類直接添加標(biāo)題等操作。
12、導(dǎo)航欄在不同的視圖控制器中隱藏和出現(xiàn)時會有黑色的條閃現(xiàn),解決方法:[self.navigationControllersetNavigationBarHidden:YESanimated:YES]; 不要用傳統(tǒng)的這個屬性設(shè)置self.navigationController.navigationBarHidden = YES。
13、今天遇到一個很有趣的問題,花費了近一個小時才搞定。當(dāng)我們用UINavigationController壓入普通視圖控制器顯示UIWebView時,網(wǎng)頁由于UINavigationBar的高度無法通過滑動完全顯示,意思就是當(dāng)我把頁面滑動到最低部網(wǎng)頁還是不能完全顯示,問題就出在導(dǎo)航欄的高度影響了。解決方案很怪異,我設(shè)置了UIWebView的高度減去導(dǎo)航欄高度就ok了,代碼如下:
CGRectrect = [UIScreenmainScreen].bounds;
_uiWebView= [[UIWebViewalloc]initWithFrame:CGRectMake(0,0, rect.size.width, rect.size.height-60)];
14、AudioServicesPlaySystemSound(1013); ?調(diào)用系統(tǒng)鈴聲。(1013只是其中一個聲音)
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); ?調(diào)用系統(tǒng)震動
15、Unbalanced calls to begin/end appearance transitions for......這種錯誤是某個視圖在切換時,動畫沒有結(jié)束又有新的動畫即將開始,所以就出問題了,解決辦法之一是去掉動畫。比如[self.navigationControllerpushViewController:zbarReaderanimated:NO]; 不用YES;
16、UILabel和UITextField,UITextView區(qū)別
UILabel 顯示的文本只讀,無法編輯,可以根據(jù)文字個數(shù)自動換行;
UITextField 可編輯本文,但是無法換行,只能在一行顯示;當(dāng)點擊鍵盤上的return時會收到一個事件做一些事情
UITextView 可編輯文本,提供換行功能。textView.layer.cornerRadius=10;//設(shè)置圓角
其實這些控鍵是否可編輯,自己可以手動設(shè)置。
17、ios編輯框隱藏鍵盤
(1)點擊編輯區(qū)域外隱藏鍵盤
UITapGestureRecognizer*tapGr = [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(dismissKeyBoard)];
tapGr.cancelsTouchesInView=NO;
[self.navigationController.navigationBaraddGestureRecognizer:tapGr];
(2)鍵盤上面添加隱藏按鈕
UIToolbar* topView = [[UIToolbaralloc]initWithFrame:CGRectMake(0,0,320,30)];
[topViewsetBarStyle:UIBarStyleBlackTranslucent];
UIBarButtonItem* doneButton = [[UIBarButtonItemalloc]initWithTitle:@"隱藏鍵盤"style:UIBarButtonItemStylePlaintarget:selfaction:@selector(dismissKeyBoard)];
NSArray* buttonsArray = [NSArrayarrayWithObjects:doneButton,nil];
[topViewsetItems:buttonsArray];
[textViewsetInputAccessoryView:topView];
18、當(dāng)需要一次創(chuàng)建很多個UILabel或者其他控鍵,如果他們的坐標(biāo)是有規(guī)律可循,就用循環(huán)創(chuàng)建。目前蘋果沒有提供一次創(chuàng)建多個屬性相同標(biāo)題不同的控鍵。
19、iOS開發(fā)之去除icon圖標(biāo)特效,陰影、反光
添加一個Icon already includes gloss effects并選擇yes,然后icon位置Prerendered搭鉤如下圖:
20、當(dāng)UITextField的內(nèi)容左對齊時太靠近左邊怎么辦?我們可以利用分類機制重寫UITextField的自帶方法:
新建文件名字叫UITextFieldCategory.h / .m共兩個文件
.h內(nèi)容如下:
@interfaceUITextField (textMath)
- (CGRect)editingRectForBounds:(CGRect)bounds;
- (CGRect)textRectForBounds:(CGRect)bounds;
@end
.m內(nèi)容如下:
#import"UITextFieldCategory.h"
@implementationUITextField (textMath)
//利用分類重寫UITextField的內(nèi)容布局方法
- (CGRect)editingRectForBounds:(CGRect)bounds
{
returnCGRectMake(bounds.origin.x+10.0f, bounds.origin.y, bounds.size.width, bounds.size.height);
}
- (CGRect)textRectForBounds:(CGRect)bounds
{
returnCGRectMake(bounds.origin.x+10.0f, bounds.origin.y, bounds.size.width, bounds.size.height);
}
@end
21、刷新、提示、進度條實現(xiàn),有第三方庫非常方便MBProgressHUD,可以在github上下載,地址:https://github.com/jdg/MBProgressHUD
22、發(fā)送郵件功能可以使用SKPSMTPMessage第三方庫,注冊一個gmail帳號就可以直接發(fā)送郵件到你制定的郵箱(qq郵箱),需要倒入框架。
23、給iphone模擬器相冊保存圖片向ios模擬器里添加圖片的方法不止一種,這里介紹最簡單的:打開模擬器后,用電腦的 Safari 瀏覽網(wǎng)頁,將需要的圖片拖到 iPhone 模擬器,模擬器就會自動打開 Safari 瀏覽到這張圖片了。此時長按圖片,在彈出的對話框里選擇保存就搞定了。
24、設(shè)置navigation上tablebar的barButtonItem顏色
self.navigationController.navigationBar.tintColor= [UIColorcolorWithRed:104/255green:189/255.0blue:227/255.0alpha:1];
25、創(chuàng)建手勢之后,在執(zhí)行了手勢選擇器后記得移出手勢,特別是這個手勢添加到一個其他控制器也使用到的對象上:
tapGr= [[UITapGestureRecognizeralloc]initWithTarget:selfaction:@selector(dismissKeyBoard)];
[self.navigationController.navigationBarremoveGestureRecognizer:tapGr];
26、應(yīng)用添加評論打分,直接進入appstore評分頁面鏈接(只要更換id就可以了):itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=331351772
27、點擊home鍵,讓程序再次點擊時重新打開程序。在Information Property List下找到“Application does not run in background”屬性,然后將這個值設(shè)置成YES。
28、ios應(yīng)用右上角添加小紅圈,如果值為0則去除紅圓圈。[UIApplicationsharedApplication].applicationIconBadgeNumber=2;
29、多線程注意事項:
(1)UI創(chuàng)建和操作都在主線程執(zhí)行。(2)非主線程主要執(zhí)行耗時的大數(shù)據(jù)處理,或者是網(wǎng)絡(luò)加載過程。
(3)每個線程的內(nèi)存管理都由開辟內(nèi)存的線程管理。
(4)次線程最好用自動內(nèi)存管理池管理內(nèi)存。
30、sendSynchronousRequest同步請求時,如果使用post傳遞參數(shù),后臺用Java接收參數(shù),必須在客戶端設(shè)置參數(shù)類型:
[requestsetValue:@"text/xml"forHTTPHeaderField:@"Content-Type"]; 如果忘記這句代碼,后臺是無法獲取參數(shù)值的。
31、XCode中文亂碼
在Mac下用普通的文本編輯器(或者用word從新保存)打開源文件,全文復(fù)制粘貼回XCode 。粘貼時提示有不可表示字符,選擇重新保存成UTF-8即可。
32、部分文件設(shè)置或者取消arc機制:選中Targets--> 選擇 Build Phases --> 展開Compile Sources ?,我們看到第二列的名稱為:Compiler Flags雙擊你所要使用ARC的文件,并輸入-fobjc-arc即可添加arc,如果想讓使用ARC機制的代碼不使用ARC機制,只需要輸入-fno-objc-arc
33、CATransition移動視圖或者淡入淡出效果經(jīng)常對UIImageView或其他視圖不其作用,此時就添加一層UIView視圖,動畫加到UIView上,UIImageView加到這個UIView上就OK了。
34、linker command failed with exit code 1 (use -v to see invocation),這種錯誤一般由兩種原因造成:
(1)Target-->Build Phases-->compile Sources中缺少了某個.m文件,點擊+號導(dǎo)入進來就可以了。
(2)Target-->Build Phases-->compile Sources中重復(fù)添加了多個相同的.m文件,刪掉多余的就可以了。
35、當(dāng)switch case的分支中定義了變量,就必須加大括號,否則語法錯誤。
36、xcode5基于iOS5.0而不是iOS7開發(fā)的話,添加百度地圖SDK時報錯,有個地方需要注意
37、UITextField最開始獲得的textField.text時,不是@"",而是nil。被這問題搞了很長時間,郁悶啊。
38、Objective-C內(nèi)存管理(iOS內(nèi)存管理)
(1) IOS對象一直都在堆上(重點啊)。
(2) 方法的參數(shù)識別:帶*星號的,是類指針變量,內(nèi)容在堆上,不帶星號的是普通局部變量在棧上。
(3) ARC中默認(rèn)的指針類型就是strong。
(4) 在默認(rèn)情況下,所有的實例變量(對象)和局部變量(對象)都是strong類型的。
(5) 只要某個對象被任一strong指針指向,那么它將不會被銷毀。如果對象沒有被任何strong指針指向,那么就將被銷毀。
(6) 在ARC機制作用下,當(dāng)某個對象被銷毀后,所有指向這個對象的weak指針將被置為nil,weak指針沒有實際指向?qū)ο蟆?/p>
(7) 相信無數(shù)的開發(fā)者都曾經(jīng)被指針指向已釋放對象所造成的EXC_BAD_ACCESS困擾過,使用ARC以后,不論是strong還是weak類型的指針,都不再會指向一個dealloced的對象,從根源上解決了意外釋放導(dǎo)致的crash。
(8) NSString *str0 = @"abc"; 和NSString *str1 = @"abc"; 都在靜態(tài)存儲區(qū)存儲,此時的str0和str1指針比較是相等的。
39、UIlabel自動換行,uilabel換行設(shè)置
//自動折行設(shè)置
label.lineBreakMode?=?UILineBreakModeWordWrap;
label.numberOfLines?=0;
40、iOS系統(tǒng)默認(rèn)可以向程序中增加最多64個本地通知,本地通知目前只能按照時分秒、年月日提示,如果想按每兩天提醒一次,就麻煩了。要判斷機器是不是支持本地通知,然后在為每一個通知指定一個標(biāo)識,取消時會用。
41、有時應(yīng)用在啟動時就會閃退,請查看你的以下方法中是否添加了耗時操作,比如網(wǎng)絡(luò)請求。
application:didFinishLaunchingWithOptions:
applicationWillResignActive:
applicationDidEnterBackground:
applicationWillEnterForeground:
applicationDidBecomeActive:
applicationWillTerminate:
上面所有這些方法,應(yīng)用只有有限的時間去完成處理。如果花費時間太長,操作系統(tǒng)將終止應(yīng)用。
42、推薦一個xcode控件KSImageNamed,KSImageNamed是一款方便填寫圖片文件名稱的插件。支持NSImage和UIImage,當(dāng)你寫到[UIImage imaged:的時候,插件會把項目中的圖片名稱提示出來,并且還有預(yù)覽功能,對經(jīng)常用代碼生成圖片視圖的童鞋十分方便。此控件使用很方便,只要打開所下載的工程然后編譯通過,再退出重新打開XCODE就可以了。下載地址:https://github.com/ksuther/KSImageNamed-Xcode
43、修改navigationBar背景色和title顏色
[userCenterNC.navigationBarsetBackgroundImage:[ToolimageWithColor:UIBUTTON_BGCORLOR]forBarMetrics:UIBarMetricsDefault];
userCenterNC.navigationBar.titleTextAttributes= [NSDictionarydictionaryWithObject:[UIColorwhiteColor]forKey:UITextAttributeTextColor];
//navigationBar返回顏色
userCenterNC.navigationBar.tintColor= [UIColorwhiteColor];
44、修改狀態(tài)欄為白色,在info.plist文件中添加兩個屬性
View controller-based status bar appearanceNO
[applicationsetStatusBarStyle:UIStatusBarStyleLightContent]; (此代碼加在AppDelegate中)
45、XCODE在Macbook Pro下觸摸板左右滑動不能切換界面,這個問題搞了一個鐘頭,所以記錄一下:方法是在打開電腦的系統(tǒng)偏好設(shè)置——>觸控板——>更多手勢,選中第一項“在頁面之間輕掃”并且給“兩個手指左右滾動”打鉤。好了這樣就解決了,上圖會看的更清晰。
46、XCODE開發(fā)時有個插件可以自動填充注釋VVDocumenter-Xcode,使用方法先去github下載工程,接著編譯成功后~/Library/Application Support/Developer/Shared/Xcode這個目錄中多了一個Contents文件,里面會有個Info.plist配置文件。這時重新啟動XCODE就可以使用自動注釋了,在方法前輸入///三個斜杠就可以了。
下載地址:https://github.com/onevcat/VVDocumenter-Xcode
47、iOS開發(fā)中有可能在程序打包前初始化很多數(shù)據(jù),比如題庫資料。上次同事給我整理了一份txt文檔,里面存儲的是大量的json數(shù)組,文件有3M左右,我剛開始用
[NSArray arrayWithContentsOfFile:path]讀取內(nèi)容,每次都返回nil,后來先給數(shù)組加了一個"key",先獲取data數(shù)據(jù),然后轉(zhuǎn)成字典。data已經(jīng)有數(shù)據(jù)了,但是字典還是nil。讓我很郁悶,后來我看到xcode中顯示的txt中文有亂碼,感覺跟編碼方式有關(guān)系,所以在MAC上先打開txt復(fù)制所有內(nèi)容,然后粘貼到xcode,這是xcode會提示你保存的utf-8格式,點擊確定,再次粘貼一下。發(fā)現(xiàn)xcode看到的txt都是中文。然后解析字典數(shù)據(jù)終于出來了,我內(nèi)個去啊。
48、關(guān)于autolayout在故事板的應(yīng)用
49、Schema->Run->Diagnostics 里面選中EnableAddressSanitizer這個選項打鉤太恐怖了。
今天使用MKMapView,一打開地圖內(nèi)存就持續(xù)暴漲,然后上到600M左右就閃退,浪費一天時間沒找出問題,最后在XCODE中把上面的勾去掉,一切就好了。
[objc]view plaincopy
50、storyboard故事板使用UIScroller注意事項,在StoryBoard中使用UIScrollView一定要用下圖中的這種布局,如果剛開始沒想到用UIScrollView后來才想加,可以選中所有Subview然后選擇Editor?-?Embed?in?-?Scroll?View,ContentView忘加了也可以類似操作。
如果scrollerView的高度超過屏幕高度,還想要添加控件時,設(shè)置Intrinsic Size 為 Placeholder,這樣storyboard會給你展示臨時的高度,運行時不會以這個高度為準(zhǔn),或者設(shè)置viewcontroller的Simulated Size屬性為Freeform值,運行時改回fixed就可以了。ScrollView上面的空間都要設(shè)置上下左右和寬高,除非是imageview設(shè)置了圖片會有默認(rèn)大小不需要約束寬高。布局時必須讓UIScrollView知道其contentSize大小,而不是一個不確定的值,這樣才算完成UIScrollView布局,不然會有類似這樣的警告:has ambiguous scrollable content height。
51、NSUserDefaults只能保存系統(tǒng)自帶對象,比如字典、字符串、數(shù)組等。并且不能有null值,否則會報錯Attempt to set a non-property-list object。
52、蘋果推送證書跟bundle id是一一對應(yīng)的。
53、如果一個xib要裝載多個cell,記得在cell.h文件反過來再劃線到xib一次,不然經(jīng)常系統(tǒng)會錯亂cell.h中的屬性是屬于xib中那個cell的。
54、想要headerView伴隨著cell一起向上滑動,也就是viewForHeaderInSection這個view。有兩種方式可以解決:
(1)在當(dāng)前控制器中重寫scrollViewDidScroll,這個方式在有下拉刷新和加載分頁時有些小問題。
[objc]view plaincopy
-?(void)scrollViewDidScroll:(UIScrollView*)scrollView?{
if(scrollView?==self.tv)
{
CGFloat?sectionHeaderHeight?=?tvHeadViewHeight;
if(scrollView.contentOffset.y<=sectionHeaderHeight&&scrollView.contentOffset.y>=0)?{
scrollView.contentInset=?UIEdgeInsetsMake(-scrollView.contentOffset.y,0,0,0);
}elseif(scrollView.contentOffset.y>=sectionHeaderHeight)?{
scrollView.contentInset=?UIEdgeInsetsMake(-sectionHeaderHeight,0,0,0);
}
}
}
(2)設(shè)置tableView的style為UITableViewStyleGrouped,并且執(zhí)行代理方法heightForFooterInSection返回0.01,取消沒用的footer行。推薦第二種方法實現(xiàn)。