? ? ? 公司項目需求,轉了Mac開發(fā),今天是實際上手代碼的第二天,總結一下昨天的問題,大部分是出在NSButton上面,現(xiàn)在對于NSButton依然不是很了解,只是把昨天解決的bug拿出來跟大家分享一下,以后對于NSButton的理解深入了,再過來補充........
Bug一、更改NSButton的高度

? ? ? 如圖所示,interfaceBuilder中拖入一個button以后,button的frame屬性Height被系統(tǒng)鎖死,無法更改。期初碰到這個bug真是感覺不可思議啊,嘗試變了屬性面板的絕大部分屬性,都沒能把高度解鎖,最后無奈之下,只好看xib文件的源碼,進行分析。
? ? ?解決方案一(推薦方案二)、
? ? ? 首先找到button控件的id(參考圖二),然后在xib文件源碼中搜索(參考圖三),


? ? ? 在圖三中可以直接修改button的rect屬性,把height直接給修改成你想要的高度值,本人期初是這么做的,但是既然是不起作用,程序編譯一次以后height的屬性值就又被系統(tǒng)給修改成默認值32,要崩潰了有木有啊......!!!
? ? ? 沒辦法,認真理下思路,再看看是不是源碼中有什么開關控制,找來找去只有translatesAutoresizingMaskIntoConstraints這個屬性最沾邊,反正是個布爾值,改下試試又不花錢,改成YES后,完美成功改變了button的高度,黃天不負有心人,終于改掉了button的高度了......
解決方案二(推薦)、
? ? ? 可是仔細思考下,蘋果應該不至于出如此難交互的開發(fā)控件吧,反正項目還不是很急,就再到處找找,多嘗試下。
? ? ? 經(jīng)過多次嘗試,終于在一個陰暗的角落發(fā)現(xiàn)了button的高度修改方法,請看圖:

? ? ? ?對,你沒看錯,就是button的style屬性,前面也說過了,嘗試了button的絕大部分屬性都不成功,但就是把style屬性給忽略了,原因就是當時嘗試了Check和Radio屬性后,直接修改了button的樣式,所以以為這個是用來修改button的樣式的,可結果誰曾料想,Square樣式就可以讓button的高度屬性解鎖呢???汗顏啊..............
? ? ? ?Bug一、更改NSButton的背景色
? ? ? 同樣找遍button的所有屬性都沒有找到能夠修改button背景色的屬性,無奈之下去看頭文件,搜索遍button及父類的所有頭文件也找不到背景色的屬性。納尼???button難道沒有背景色嗎?沒辦法,無奈之下,去github上面找找資料看看,下了一份MXButton來看看,根據(jù)作者的描述是可以修改Button的背景色的。拿到代碼之后看到,作者是把ButtonCell中的backgroundColor屬性封裝到了Button一層,以便修改。哦哦,搜打死內,原來Button的背景色屬性在ButtonCell里面啊,再去interfaceBuilder的屬性面板中看一眼吧,好吧,我確認我查看的是ButtonCell的屬性,可以依然找不到backgroundColor屬性,好吧......我無奈了,蘋果,你夠可以的,我服,大寫的服!?。?/p>
? ? ? 既然MXButton可以解決這個問題,那就用MXButton吧,畢竟還有點特色功能,雖然不怎么起眼.......納尼?怎么又失敗了,欲哭無淚啊.........
? ? ? 總結:MXButton不可以修改NSButton的背景色?。?!
? ? ? 既然此路不通,咱就再想其他的法,使用KVC直接修改NSButton的背景色,通過打印日志可以看到,backgroundColor屬性確實被修改掉了,但是NSButton的背景色依然沒有修改成功,看來,蘋果更新的時候,backgroundColor屬性已經(jīng)被棄用了啊.......
? ? ? 沒辦法,又一路不通,咱再想其它法,這才是程序員精神?。?!
? ? ? 通過Google發(fā)現(xiàn),stackoverflow上面對于修改NSbutton背景色的回答,清一色都是:蘋果不推薦如此做,或者不建議這么做。偶然翻到一個說是重寫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ù)需要補充的知識點:
一、NSButton和NSButtonCell的關系.....這個暫時先放后邊去慢慢了解吧
早上留的坑,中午沒啥事,就去查了一下蘋果的官方文檔,所以過來補充下,先上圖....




如果又看到這段的大神,也可以留言幫我解疑,謝過.....