iOS button setImage 的疑問

今天在看HM微博的視頻赡模,有個(gè)疑問:
MJ老師視頻中的代碼:

for (int i = 0; i<count; i++) {
        UIButton *btn = [[UIButton alloc] init];
        HWEmotion *emotion = emotions[i];
        
        if (emotion.png) { // 有圖片
            [btn setImage:[UIImage imageNamed:emotion.png] forState:UIControlStateNormal];
        } else if (emotion.code) { // 是emoji表情
            // 設(shè)置emoji
            [btn setTitle:emotion.code.emoji forState:UIControlStateNormal];
            btn.titleLabel.font = [UIFont systemFontOfSize:32];
        }

其中婿着,emotion是一個(gè)模型,png是它的屬性近她。

屏幕快照 2015-09-21 下午10.55.04.png
但是問題來(lái)了翎苫,表情的所有圖片和info.plist都是放在藍(lán)色文件里混蔼,即
屏幕快照 2015-09-21 下午10.56.36.png

而之前宋列,已經(jīng)通過(guò)以下代碼把各個(gè)藍(lán)色文件里的info.plist轉(zhuǎn)換為模型丘侠。

[[NSBundle mainBundle] pathForResource:@"EmotionIcons/default/info.plist" ofType:nil]

按照網(wǎng)上的一些說(shuō)法,藍(lán)色文件里的圖片不是沒法用UIImaged imageNamed嗎攒磨?
參考:
[[UIImage imageNamed:@"tab_back"]不顯示圖片的問題解決]

ios開發(fā)UIImage imageNamed方法的誤用

可是泳桦,MJ老師視頻用UIImaged imageNamed能夠成功顯示圖片。

我本來(lái)也想通過(guò)UIImaged imageNamed設(shè)置圖片娩缰,但是不成功灸撰。
我的代碼是:

HMEmotion *emotion = emotions[i];
        if (emotion.png) {
            HMLog(@"%@",emotion.png);
            [btn setImage:[UIImage imageNamed:emotion.png] forState:UIControlStateNormal];
            HMLog(@"%@",btn.currentImage);
        }else if (emotion.code){            
            //設(shè)置emoji
//            HMLog(@"%@",emotion.code);
            [btn setTitle:emotion.code.emoji forState:UIControlStateNormal];
            btn.titleLabel.font = [UIFont systemFontOfSize:32];
            HMLog(@"%@",btn.currentTitle);
        }

log打印信息:

屏幕快照 2015-09-21 下午11.07.32.png

瞧,雖然成功從模型中取得emotion.png的值拼坎,但是設(shè)置圖片沒有成功浮毯。

原因到底是為什么?從網(wǎng)上找了很久泰鸡,還是沒有找到原因债蓝。暫時(shí)先記錄這個(gè)疑問,找到解決方法后再來(lái)完善這貼盛龄。

待續(xù)

通過(guò)種種嘗試饰迹,終于解決了button setImage 不成功的問題。
谷歌讯嫂,搜索關(guān)鍵字:ios uibutton setimage not working

屏幕快照 2015-09-22 下午3.36.52.png

找到stavkoverflow上的解疑貼:
UIButton setImage not working

帖子中說(shuō)到蹦锋,要先檢測(cè)下有沒有成功返回一個(gè)有效的image,如下:

屏幕快照 2015-09-22 下午3.38.10.png

然后欧芽,我修改了自己的代碼:

        HMEmotion *emotion = emotions[i];
//        HMLog(@"%@",emotions);
        if (emotion.png) {
            HMLog(@"%@",emotion.png);
            UIImage *imageTest = [UIImage imageNamed:emotion.png];
            if (imageTest) {
                [btn setImage:[UIImage imageNamed:emotion.png] forState:UIControlStateNormal];
            }else{
                HMLog(@"why is my image object nil?");
            }
            HMLog(@"%@",btn.currentImage);
        }else if (emotion.code){            
            //設(shè)置emoji
//            HMLog(@"%@",emotion.code);
            [btn setTitle:emotion.code.emoji forState:UIControlStateNormal];
            btn.titleLabel.font = [UIFont systemFontOfSize:32];
            HMLog(@"%@",btn.currentTitle);
        }
        [self addSubview:btn];

log打印信息:

屏幕快照 2015-09-22 下午3.41.50.png

從log打印信息,可以看到雖然我成功從模型HMEmotion中取得png的值葛圃,但是沒有成功返回一張有效的image千扔,所以button setImage自然沒法成功執(zhí)行。

原因库正,就在于沒有成功返回一張有效的image曲楚。
解決方案

思路:結(jié)合上文UIImage imageNamed沒法通過(guò)藍(lán)色文件夾設(shè)置圖片。我猜測(cè)可能是路徑問題褥符。
所以龙誊,我修改圖片資源路徑,如下:

屏幕快照 2015-09-22 下午3.46.03.png

相應(yīng)的喷楣,需要修改字典轉(zhuǎn)模型的路徑代碼趟大,如下:

屏幕快照 2015-09-22 下午3.46.48.png

將以上兩步修改完后鹤树,iOS button setImage終于執(zhí)行了。
截圖:

屏幕快照 2015-09-22 下午3.48.19.png

總結(jié):
雖然找到了自己代碼的bug所在逊朽,也成功地解決了button setImage設(shè)置圖片不成功的問題罕伯。但是,對(duì)于UIImage imageNamed 的疑問還是存留著叽讳,以后有時(shí)間再研究下追他。

再待續(xù)

剛才拷貝了demo,把a(bǔ)pp刪掉岛蚤,重新編譯運(yùn)行demo邑狸。然后,奇怪的事情發(fā)生了涤妒,button setImage 又不能執(zhí)行推溃。種種“奇怪”的事情表明,藍(lán)色文件夾里的圖片資源沒法用UIImage imageNamed獲取届腐。所以铁坎,我最終決定把之前三個(gè)藍(lán)色文件夾里的資源都存在一個(gè)黃色文件夾里,修改他們的info.plist的名字犁苏。如下:

屏幕快照 2015-09-22 下午4.59.19.png

結(jié)果:終于成功了硬萍,而且刪掉app重新運(yùn)行也一樣生效。

屏幕快照 2015-09-22 下午4.59.43.png

總結(jié):希望這是最后一次研究這個(gè)問題围详,折騰快6個(gè)小時(shí)以上了朴乖。以后對(duì)于大量圖片資源(ps:資源很小)助赞,要用UIImage imageNamed买羞,但是要放在黃色文件夾里。放在藍(lán)色文件夾里雹食,雖然有時(shí)候可能成功加載圖片畜普,但是以后可能失效,這都是親身體驗(yàn)叭阂丁吃挑!原因見上面有關(guān)UIImage imageNamed的兩個(gè)帖子吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末街立,一起剝皮案震驚了整個(gè)濱河市舶衬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赎离,老刑警劉巖逛犹,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡虽画,警方通過(guò)查閱死者的電腦和手機(jī)舞蔽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)狸捕,“玉大人喷鸽,你說(shuō)我怎么就攤上這事【呐模” “怎么了做祝?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)鸡岗。 經(jīng)常有香客問我混槐,道長(zhǎng),這世上最難降的妖魔是什么轩性? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任声登,我火速辦了婚禮,結(jié)果婚禮上揣苏,老公的妹妹穿的比我還像新娘悯嗓。我一直安慰自己,他們只是感情好卸察,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布脯厨。 她就那樣靜靜地躺著,像睡著了一般坑质。 火紅的嫁衣襯著肌膚如雪合武。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天涡扼,我揣著相機(jī)與錄音稼跳,去河邊找鬼。 笑死吃沪,一個(gè)胖子當(dāng)著我的面吹牛汤善,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播巷波,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼萎津,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了抹镊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤荤傲,失蹤者是張志新(化名)和其女友劉穎垮耳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡终佛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年俊嗽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铃彰。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绍豁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出牙捉,到底是詐尸還是另有隱情竹揍,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布邪铲,位于F島的核電站芬位,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏带到。R本人自食惡果不足惜昧碉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望揽惹。 院中可真熱鬧被饿,春花似錦、人聲如沸搪搏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)慕嚷。三九已至哥牍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間喝检,已是汗流浹背嗅辣。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挠说,地道東北人澡谭。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像损俭,于是被迫代替她去往敵國(guó)和親蛙奖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

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

  • iOS開發(fā)系列--網(wǎng)絡(luò)開發(fā) 概覽 大部分應(yīng)用程序都或多或少會(huì)牽扯到網(wǎng)絡(luò)開發(fā)杆兵,例如說(shuō)新浪微博雁仲、微信等,這些應(yīng)用本身可...
    lichengjin閱讀 3,671評(píng)論 2 7
  • 1琐脏、禁止手機(jī)睡眠[UIApplication sharedApplication].idleTimerDisabl...
    DingGa閱讀 1,117評(píng)論 1 6
  • 那年那月攒砖,正是青春年少缸兔,愛上了寫作,沒有目標(biāo)設(shè)計(jì)的愛好吹艇。 不知道經(jīng)歷過(guò)多少的春夏秋冬惰蜜,也不知道...
    白豐閣閱讀 623評(píng)論 2 3
  • 難熬的深夜 死亡來(lái)迎接 寄托與被寄托的無(wú)奈 撕裂的傷口無(wú)法愈合 被分割無(wú)數(shù)個(gè)日日夜夜 舔舐著虛偽的姿態(tài) 揮灑著得不...
    胤女閱讀 190評(píng)論 0 4
  • 程序猿的開心一刻 下面哪種面向?qū)ο蟮姆椒梢宰屇阕兊酶挥校縜受神,繼承抛猖;b,封裝鼻听;c财著,多態(tài);d精算,抽象瓢宦。 請(qǐng)?jiān)谠u(píng)論區(qū)輸入...
    狼牙戰(zhàn)士閱讀 2,170評(píng)論 0 6