? ? ? 公司項(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的高度
? ? ? 如圖所示,interfaceBuilder中拖入一個(gè)button以后祟偷,button的frame屬性Height被系統(tǒng)鎖死,無(wú)法更改贺辰。期初碰到這個(gè)bug真是感覺(jué)不可思議啊,嘗試變了屬性面板的絕大部分屬性饲化,都沒(méi)能把高度解鎖吗伤,最后無(wú)奈之下,只好看xib文件的源碼巢块,進(jìn)行分析巧号。
? ? ?解決方案一(推薦方案二)、
? ? ? 首先找到button控件的id(參考圖二)越走,然后在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)看圖:
? ? ? ?對(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ǔ)充下,先上圖....
如果又看到這段的大神躬审,也可以留言幫我解疑承边,謝過(guò).....