Mac OS X開(kāi)發(fā)之NSButton

? ? ? 公司項(xiàng)目需求必怜,轉(zhuǎn)了Mac開(kāi)發(fā),今天是實(shí)際上手代碼的第二天梳庆,總結(jié)一下昨天的問(wèn)題,大部分是出在NSButton上面驻售,現(xiàn)在對(duì)于NSButton依然不是很了解更米,只是把昨天解決的bug拿出來(lái)跟大家分享一下,以后對(duì)于NSButton的理解深入了迟几,再過(guò)來(lái)補(bǔ)充........

Bug一栏笆、更改NSButton的高度


圖一,button的frame屬性Height被系統(tǒng)鎖死存哲,無(wú)法更改

? ? ? 如圖所示,interfaceBuilder中拖入一個(gè)button以后祟偷,button的frame屬性Height被系統(tǒng)鎖死,無(wú)法更改贺辰。期初碰到這個(gè)bug真是感覺(jué)不可思議啊,嘗試變了屬性面板的絕大部分屬性饲化,都沒(méi)能把高度解鎖吗伤,最后無(wú)奈之下,只好看xib文件的源碼巢块,進(jìn)行分析巧号。

? ? ?解決方案一(推薦方案二)、

? ? ? 首先找到button控件的id(參考圖二)越走,然后在xib文件源碼中搜索(參考圖三)靠欢,


圖二:button的ID再屬性面板中的位置


圖三:button在xib中的源碼

? ? ? 在圖三中可以直接修改button的rect屬性门怪,把height直接給修改成你想要的高度值,本人期初是這么做的薪缆,但是既然是不起作用,程序編譯一次以后height的屬性值就又被系統(tǒng)給修改成默認(rèn)值32疼电,要崩潰了有木有啊......!!!

? ? ? 沒(méi)辦法减拭,認(rèn)真理下思路,再看看是不是源碼中有什么開(kāi)關(guān)控制修陡,找來(lái)找去只有translatesAutoresizingMaskIntoConstraints這個(gè)屬性最沾邊沧侥,反正是個(gè)布爾值宴杀,改下試試又不花錢拾因,改成YES后,完美成功改變了button的高度扁达,黃天不負(fù)有心人蠢熄,終于改掉了button的高度了......

解決方案二(推薦)、

? ? ? 可是仔細(xì)思考下签孔,蘋果應(yīng)該不至于出如此難交互的開(kāi)發(fā)控件吧,反正項(xiàng)目還不是很急节吮,就再到處找找判耕,多嘗試下翘骂。

? ? ? 經(jīng)過(guò)多次嘗試,終于在一個(gè)陰暗的角落發(fā)現(xiàn)了button的高度修改方法草丧,請(qǐng)看圖:

圖四:button的style屬性

? ? ? ?對(duì)莹桅,你沒(méi)看錯(cuò),就是button的style屬性懂拾,前面也說(shuō)過(guò)了铐达,嘗試了button的絕大部分屬性都不成功,但就是把style屬性給忽略了瓮孙,原因就是當(dāng)時(shí)嘗試了Check和Radio屬性后选脊,直接修改了button的樣式恳啥,所以以為這個(gè)是用來(lái)修改button的樣式的丹诀,可結(jié)果誰(shuí)曾料想,Square樣式就可以讓button的高度屬性解鎖呢扁藕?疚脐??汗顏啊..............

? ? ? ?Bug一棍弄、更改NSButton的背景色

? ? ? 同樣找遍button的所有屬性都沒(méi)有找到能夠修改button背景色的屬性,無(wú)奈之下去看頭文件痕支,搜索遍button及父類的所有頭文件也找不到背景色的屬性蛮原。納尼?花嘶??button難道沒(méi)有背景色嗎椭员?沒(méi)辦法笛园,無(wú)奈之下,去github上面找找資料看看埋同,下了一份MXButton來(lái)看看蚜印,根據(jù)作者的描述是可以修改Button的背景色的。拿到代碼之后看到哟冬,作者是把ButtonCell中的backgroundColor屬性封裝到了Button一層,以便修改浩峡。哦哦,搜打死內(nèi)翰灾,原來(lái)Button的背景色屬性在ButtonCell里面啊,再去interfaceBuilder的屬性面板中看一眼吧平斩,好吧咽块,我確認(rèn)我查看的是ButtonCell的屬性,可以依然找不到backgroundColor屬性揭璃,好吧......我無(wú)奈了亭罪,蘋果,你夠可以的应役,我服,大寫的服I胩琛>T稹!

? ? ? 既然MXButton可以解決這個(gè)問(wèn)題盲泛,那就用MXButton吧键耕,畢竟還有點(diǎn)特色功能,雖然不怎么起眼.......納尼村视?怎么又失敗了,欲哭無(wú)淚啊.........

? ? ? 總結(jié):MXButton不可以修改NSButton的背景色R峡住!杠氢!

? ? ? 既然此路不通,咱就再想其他的法绞旅,使用KVC直接修改NSButton的背景色,通過(guò)打印日志可以看到因悲,backgroundColor屬性確實(shí)被修改掉了勺爱,但是NSButton的背景色依然沒(méi)有修改成功,看來(lái)蝎土,蘋果更新的時(shí)候绣否,backgroundColor屬性已經(jīng)被棄用了啊.......

? ? ? 沒(méi)辦法,又一路不通蒜撮,咱再想其它法,這才是程序員精神H∮狻F恢А!

? ? ? 通過(guò)Google發(fā)現(xiàn)晴埂,stackoverflow上面對(duì)于修改NSbutton背景色的回答,清一色都是:蘋果不推薦如此做儒洛,或者不建議這么做狼速。偶然翻到一個(gè)說(shuō)是重寫drawRect方法的,如獲至寶啊.......重寫恼蓬,走起.......


```

@interfaceYHNButton :NSButton

@property(nonatomic,strong)NSColor*backgroundColor;

@property(nonatomic,strong)NSColor*titleColor;

@end

- (void)drawRect:(NSRect)dirtyRect

{

;

[superdrawRect:dirtyRect];

if(self.backgroundColor!=nil) {

[self.backgroundColorset];

NSRectFill(self.bounds);

}

//繪制文字

if(self.title!=nil) {

NSColor*color =self.titleColor?self.titleColor: [NSColorblackColor];

NSMutableParagraphStyle*paraStyle = [[NSMutableParagraphStylealloc]init];

[paraStylesetParagraphStyle:[NSParagraphStyledefaultParagraphStyle]];

[paraStylesetAlignment:NSCenterTextAlignment];

//[paraStyle setLineBreakMode:NSLineBreakByTruncatingTail];

NSDictionary*attrButton = [NSDictionarydictionaryWithObjectsAndKeys:[NSFontfontWithName:@"Verdana"size:14],NSFontAttributeName, color,NSForegroundColorAttributeName, paraStyle,NSParagraphStyleAttributeName,nil];

NSAttributedString* btnString = [[NSAttributedStringalloc]initWithString:self.titleattributes:attrButton];

[btnStringdrawInRect:NSMakeRect(0,4,self.frame.size.width,self.frame.size.height)];

}

}

```


后續(xù)需要補(bǔ)充的知識(shí)點(diǎn):

一滚秩、NSButton和NSButtonCell的關(guān)系.....這個(gè)暫時(shí)先放后邊去慢慢了解吧

早上留的坑,中午沒(méi)啥事本股,就去查了一下蘋果的官方文檔桐腌,所以過(guò)來(lái)補(bǔ)充下,先上圖....


圖五:NSCell


圖六:NSButtonCell


圖七:NSButton


圖八:backgroundColor


如果又看到這段的大神躬审,也可以留言幫我解疑承边,謝過(guò).....

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末博助,一起剝皮案震驚了整個(gè)濱河市痹愚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窖式,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萝喘,死亡現(xiàn)場(chǎng)離奇詭異狼电,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門凸椿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人髓抑,你說(shuō)我怎么就攤上這事⊥拭停” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵伊滋,是天一觀的道長(zhǎng)队秩。 經(jīng)常有香客問(wèn)我,道長(zhǎng)筒主,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任乌妙,我火速辦了婚禮冠胯,結(jié)果婚禮上锦针,老公的妹妹穿的比我還像新娘。我一直安慰自己奈搜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布焕盟。 她就那樣靜靜地躺著宏粤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪来农。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,274評(píng)論 1 300
  • 那天沃于,我揣著相機(jī)與錄音,去河邊找鬼檩互。 笑死咨演,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的薄风。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼告抄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼打洼!你這毒婦竟也來(lái)了逆粹?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤阿浓,失蹤者是張志新(化名)和其女友劉穎蹋绽,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體卸耘,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年侈百,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钝域。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锭魔。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖赂毯,靈堂內(nèi)的尸體忽然破棺而出拣宰,到底是詐尸還是另有隱情烦感,我是刑警寧澤膛堤,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布肥荔,位于F島的核電站绿渣,受9級(jí)特大地震影響燕耿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜淀散,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一档插、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧亚再,春花似錦郭膛、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至如捅,卻和暖如春棍现,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伪朽。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工轴咱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人烈涮。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓朴肺,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親坚洽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

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

  • 1需了、設(shè)置UILabel行間距 NSMutableAttributedString*attrString=[[NSM...
    iOS祎閱讀 2,158評(píng)論 0 0
  • 1.badgeVaule氣泡提示 2.git終端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夾內(nèi)容...
    i得深刻方得S閱讀 4,662評(píng)論 1 9
  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,751評(píng)論 1 92
  • 每天下班回家蛉拙,母親就已經(jīng)在廚房里張羅了孕锄,愛(ài)人帶著兩個(gè)孩子正在嬉鬧硫惕,一個(gè)不會(huì)說(shuō)話,兩個(gè)吵吵鬧鬧恼除。 吃著桌子上的三菜一...
    淡然心閱讀 209評(píng)論 2 1
  • 大約一周前就看到這次活動(dòng),當(dāng)時(shí)有興趣徽级,但是轉(zhuǎn)念一想聊浅,我是一個(gè)特別容易放棄的人低匙,不如算了吧。昨天晚上再次看到推送的時(shí)...
    何kk閱讀 203評(píng)論 0 0