iOS開(kāi)發(fā)知識(shí)點(diǎn)總結(jié)【持續(xù)更新】

以下都是自己在iOS開(kāi)發(fā)的過(guò)程中遇到的問(wèn)題,自己總結(jié)出來(lái)的小知識(shí)點(diǎn)魄眉。

1.UITableViewCell的contenView的superView在iOS8以上是UITableViewCell恃泪,在iOS8以下則不是队腐。所以訪問(wèn)contentView的superView的時(shí)候需要注意區(qū)分iOS系統(tǒng)版本。

2.程序中一個(gè)UITabBarController控制了四個(gè)UINavigationController,在某個(gè)頁(yè)面上點(diǎn)擊按鈕要讓tabbar選中某一個(gè)baritem薪前,需要先設(shè)置tabbar的selectedIndex再將當(dāng)前的nav popToRootViewController润努。順序相反會(huì)導(dǎo)致tabbar隱藏。

3.在某個(gè)界面上有個(gè)UITableView示括,需要在滑動(dòng)的時(shí)候改變另外一個(gè)UIView铺浇,所以在代碼中添加了如下代理方法:

-(void)scrollViewDidScroll:(UIScrollView*)scrollView

實(shí)現(xiàn)了需求。但是如果當(dāng)UITableView正在滑動(dòng)的時(shí)候pop了當(dāng)前視圖垛膝,程序會(huì)奔潰鳍侣。

原因:想已經(jīng)釋放的對(duì)象發(fā)送了消息。吼拥。倚聚。。

就是在返回之后凿可,當(dāng)前視圖對(duì)象釋放了惑折,但是又調(diào)用了委托方法。

應(yīng)該在dealloc方法中將UITableView的委托設(shè)置為nil,避免UITableView正在滑動(dòng)的時(shí)候返回會(huì)奔潰惨驶。

-(void)dealloc

{

tableView.delegate = nil;

tableView.dataSource = nil;

//這里要注意白热,如果項(xiàng)目使用了arc的話,不要調(diào)用super dealloc方法粗卜。

}

4.十進(jìn)制數(shù)轉(zhuǎn)十六進(jìn)制數(shù)的命令:

echo 'obase=16;1104129754’|bc ? 其中1104129754是十進(jìn)制數(shù)

這個(gè)在分享功能中添加URL Scheme的時(shí)候有需要屋确。

5.UITableViewCell自動(dòng)布局,在cell的最下面自己用UILbel加一個(gè)橫線休建。那么添加約束的時(shí)候乍恐,這個(gè)UILabel的寬度要添加跟self的寬度一樣。因?yàn)槿绻鹀ell設(shè)置了cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;并且添加UILabel的寬度跟self.contentView的寬度一樣的話测砂,就會(huì)出現(xiàn)這個(gè)UILabel的右邊緣到cell上面的向右的箭頭的位置就結(jié)束了茵烈。這說(shuō)明contentView的右邊界是到向右箭頭的左邊為止的。

像這樣的:

6.在自動(dòng)布局的UITableViewCell向下復(fù)現(xiàn)的時(shí)候(即UITableView向下滾動(dòng)的時(shí)候砌些,已經(jīng)出現(xiàn)過(guò)的Cell重現(xiàn)出現(xiàn)呜投。)帶有一跳一跳的效果。檢查發(fā)現(xiàn)是因?yàn)樵O(shè)置tableView.estimatedRowHeight=40;導(dǎo)致的存璃。因?yàn)槲疫@里有兩個(gè)高度不同的cell仑荐,一個(gè)高度是10(作為分隔線的),一個(gè)高度根據(jù)自適應(yīng)計(jì)算的纵东。如果設(shè)置了預(yù)估高度的話粘招,高度本來(lái)應(yīng)該為10的cell出現(xiàn)的時(shí)候會(huì)先設(shè)置為40然后又變?yōu)?0,這就導(dǎo)致了跳動(dòng)效果偎球。

因此洒扎,當(dāng)UITableView有多個(gè)不同高度的UITableViewCell的時(shí)候,不應(yīng)該設(shè)置UITableView的estimatedRowHeight屬性來(lái)只設(shè)置一個(gè)預(yù)估高度值衰絮。否則會(huì)導(dǎo)致UITableView向下滑動(dòng)袍冷,UITableViewCell復(fù)現(xiàn)的時(shí)候有一跳一跳的效果。

不過(guò)可以通過(guò)委托方法- (CGFloat)tableView:(UITableView*)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath*)indexPath來(lái)設(shè)置不同樣式的UITableViewCell的預(yù)估高度猫牡。

7.自動(dòng)布局中多行UILabel胡诗,需要設(shè)置其preferredMaxLayoutWidth屬性才能正常顯示多行內(nèi)容。

8.可以使用NSArray或者NSSet的

-?(void)makeObjectsPerformSelector:(SEL)aSelector;

-?(void)makeObjectsPerformSelector:(SEL)aSelectorwithObject:(id)argument;

這兩個(gè)相當(dāng)于for循環(huán)的方法來(lái)依次讓NSArray或者NSSet中的對(duì)象執(zhí)行aSelector方法淌友。


9.給手勢(shì)添加新的目標(biāo)對(duì)象和方法:

- (void)addTarget:(id)target action:(SEL)action

在當(dāng)前視圖上面添加了一個(gè)自定義的菜單視圖menu煌恢,menu上面添加了一個(gè)單擊手勢(shì)UITapGestureRecognizer(不是menu的公開(kāi)屬性)來(lái)展開(kāi)和收起菜單,具體事件是寫在menu里面的.

現(xiàn)在當(dāng)前視圖上面有文本框震庭,需求是在不改動(dòng)menu的前提下症虑,點(diǎn)擊菜單的時(shí)候,釋放鍵盤归薛。

想過(guò)給menu新添加一個(gè)UITapGestureRecognizer手勢(shì)來(lái)解決這個(gè)問(wèn)題谍憔,但是想想它既然已經(jīng)有了一個(gè)單擊手勢(shì)匪蝙,何必再新添加一個(gè)呢。經(jīng)查閱文檔习贫,發(fā)現(xiàn)有這么個(gè)解決方案:

NSArray*gestureArray = menu.gestureRecognizers;

for(UIGestureRecognizer*gestureingestureArray)

{

? ?if([gestureisKindOfClass:[UITapGestureRecognizerclass]])

? ?{

? ? ? ?UITapGestureRecognizer*tapGesture = (UITapGestureRecognizer*)gesture;

? ? ? ? [tapGestureaddTarget:selfaction:@selector(menuTaped)];

? ? ? ? ?break;

? ?}

}

在當(dāng)前視圖中獲取自己創(chuàng)建的這個(gè)menu上面添加的UITapGestureRecognizer手勢(shì)逛球,然后給它新增一個(gè)目標(biāo)對(duì)象和方法,在方法中處理釋放鍵盤的邏輯苫昌。


10.設(shè)置導(dǎo)航的返回按鈕標(biāo)題需求:只顯示返回圖標(biāo)颤绕,不顯示返回按鈕的標(biāo)題

//!!!!:設(shè)置導(dǎo)航返回按鈕文字的正確姿勢(shì)!

UIBarButtonItem*item = [[UIBarButtonItemalloc]initWithTitle:@""style:UIBarButtonItemStylePlaintarget:nilaction:nil];

self.navigationItem.backBarButtonItem= item;


網(wǎng)上有人說(shuō)可以用下面的方法祟身,但是實(shí)踐發(fā)現(xiàn)下面這種方法在VC的標(biāo)題很短的時(shí)候不會(huì)出現(xiàn)問(wèn)題奥务,一旦標(biāo)題變長(zhǎng),這種方法會(huì)導(dǎo)致標(biāo)題向右偏移袜硫,看起來(lái)很不好氯葬。。婉陷。帚称。

[[UIBarButtonItemappearance]setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60)

forBarMetrics:UIBarMetricsDefault];

偏移效果如下:

11.頁(yè)面下拉刷新箭頭有時(shí)候在加載過(guò)程中push進(jìn)新頁(yè)面然后再返回的時(shí)候收不起來(lái)的問(wèn)題

self.edgesForExtendedLayout=UIRectEdgeNone;是因?yàn)閟elf.view addSubView:添加的第一個(gè)子視圖不是UIScrollView的子類,而沒(méi)有設(shè)置這個(gè)導(dǎo)致的秽澳。

12.在當(dāng)前頁(yè)面A中有一個(gè)UITextField文本框闯睹,并添加了UITextFieldTextDidChangeNotification通告,當(dāng)文本框內(nèi)容改變時(shí)進(jìn)行動(dòng)態(tài)搜索匹配担神,在收到通知之后改變這個(gè)文本框的內(nèi)容楼吃。但是,如果現(xiàn)在push進(jìn)來(lái)了一個(gè)新的帶有文本框的頁(yè)面B妄讯,當(dāng)在B中文本框內(nèi)輸入內(nèi)容之后再返回A孩锡,這時(shí)候發(fā)現(xiàn)A中的文本框的內(nèi)容是B中文本框所填的內(nèi)容。

這是因?yàn)橥ǜ娴膯?wèn)題捞挥,在監(jiān)聽(tīng)通告的地方?jīng)]有判斷是不是當(dāng)前A中的文本框觸發(fā)的,只需在方法中判斷一下即可忧吟。

13.tabaritem的標(biāo)題默認(rèn)跟它對(duì)應(yīng)的nav的rootviewcontroller的self.title是一樣的砌函。如果要tbbaritem的文字跟self.title不一樣,可以在rootviewcontroller中設(shè)置self.naigationItem.title@“標(biāo)題”;而不是直接用self.title屬性溜族。

14.當(dāng)給一個(gè)UIImageView添加固定寬高約束讹俊,但是當(dāng)加載的網(wǎng)絡(luò)圖片比約束的寬高大很多的時(shí)候,顯示的圖片內(nèi)容會(huì)撐出UIImageView的邊界煌抒,設(shè)置了UIImageView的contentMode也不行仍劈。這個(gè)給UIImage添加一個(gè)Resize分類,并添加一個(gè)新的方法:

-(instancetype)resizeToSize:(CGSize)size

{

UIGraphicsBeginImageContext(size);

[selfdrawInRect:CGRectMake(0,0, size.width, size.height)];

UIImage*newImage =UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

returnnewImage;

}

對(duì)UIImageView的imag進(jìn)行重繪就不會(huì)出現(xiàn)這種情況了寡壮。

15.在自定義單元格上面贩疙,左邊一個(gè)UILabel右邊對(duì)齊顯示標(biāo)題讹弯,右邊一個(gè)UITextField供用戶輸入內(nèi)容。給UILabel添加了固定寬度約束这溅,給UITextFiled添加了邊距約束组民。但是當(dāng)UITextField中輸入內(nèi)容很長(zhǎng)的時(shí)候會(huì)發(fā)現(xiàn)UITextFiled會(huì)把左邊的UILabel擠壓到左邊(比如UILabel顯示的文字是@“姓名”給它加的寬度約束是100,但是實(shí)際顯示的時(shí)候會(huì)顯示到單元格的最左邊悲靴,只有剛剛好能顯示全@“姓名”的寬度臭胜,剩下的單元格寬度都給了UItextFiled。)這種效果不是我們想要的效果癞尚,我們想要UILabel固定寬度耸三。只需要將右邊的UITextField也添加一個(gè)寬度約束即可,添加lessThanOrEqualTo(這里加上cell的寬度減去左邊UILabel的寬度以及它們之間的間隔)這樣當(dāng)文本框輸入內(nèi)容很長(zhǎng)的時(shí)候就不會(huì)擠壓左邊的UILabel了浇揩。


16.獲取APP的Launch Image(from:里脊串的開(kāi)發(fā)隨筆)

CGSizeviewSize =self.window.bounds.size;

NSString*viewOrientation =@"Portrait";//橫屏請(qǐng)?jiān)O(shè)置成 @"Landscape"

NSString*launchImage =nil;

NSArray* imagesDict = [[[NSBundlemainBundle] infoDictionary] valueForKey:@"UILaunchImages"];

for(NSDictionary* dictinimagesDict)

{

CGSizeimageSize =CGSizeFromString(dict[@"UILaunchImageSize"]);

if(CGSizeEqualToSize(imageSize, viewSize) && [viewOrientation isEqualToString:dict[@"UILaunchImageOrientation"]])

{

launchImage = dict[@"UILaunchImageName"];

}

}



17.Xcode Tip合集 (from:sunnyxx的博客)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末仪壮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子临燃,更是在濱河造成了極大的恐慌睛驳,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件膜廊,死亡現(xiàn)場(chǎng)離奇詭異乏沸,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)爪瓜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門蹬跃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人铆铆,你說(shuō)我怎么就攤上這事蝶缀。” “怎么了薄货?”我有些...
    開(kāi)封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵翁都,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我谅猾,道長(zhǎng)柄慰,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任税娜,我火速辦了婚禮坐搔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘敬矩。我一直安慰自己概行,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布弧岳。 她就那樣靜靜地躺著凳忙,像睡著了一般业踏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上消略,一...
    開(kāi)封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音艺演,去河邊找鬼却紧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛胎撤,可吹牛的內(nèi)容都是我干的晓殊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼伤提,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼巫俺!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起肿男,我...
    開(kāi)封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤介汹,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后舶沛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嘹承,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年如庭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了叹卷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡坪它,死狀恐怖骤竹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情往毡,我是刑警寧澤蒙揣,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站开瞭,受9級(jí)特大地震影響懒震,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惩阶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一挎狸、第九天 我趴在偏房一處隱蔽的房頂上張望扣汪。 院中可真熱鬧断楷,春花似錦、人聲如沸崭别。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至舞痰,卻和暖如春土榴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背响牛。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工玷禽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人呀打。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓矢赁,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親贬丛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子撩银,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容