Phân lớp NSButtonCell và gán cho nút CELL của bạn bằng IB (không phải nút BUTTON trực tiếp -> một cấp sâu hơn). Trong lớp con thực hiện những điều sau và modifiy kích thước, font chữ và màu sắc theo ý muốn:
- (NSAttributedString*)attributedTitleForString:(NSString*)string
{
// Colors
NSColor *disabledColor = [NSColor grayColor];
NSColor *enabledColor = [NSColor redColor];
// Font
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
[style setAlignment:NSLeftTextAlignment];
NSFont *font = [NSFont systemFontOfSize:11];
// Enabled
NSDictionary *enabledAttrsDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
enabledColor, NSForegroundColorAttributeName,
style, NSParagraphStyleAttributeName,
font, NSFontAttributeName,
nil];
NSAttributedString* enabledTitle = [[NSAttributedString alloc]initWithString:string attributes:enabledAttrsDictionary];
// Disabled
NSDictionary *disabledAttrsDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
disabledColor, NSForegroundColorAttributeName,
style, NSParagraphStyleAttributeName,
font, NSFontAttributeName, nil];
NSAttributedString* disabledTitle = [[NSAttributedString alloc]initWithString:string attributes:disabledAttrsDictionary];
if (![self isEnabled])
return disabledTitle;
else
return enabledTitle;
}
EDIT: Chỉ hoạt động nếu setWantsLayers là sai
Nguồn
2017-03-11 10:20:18
bạn có thể ghi đè lên thuộc tính của nút chứ không phải vô hiệu hóa nó - nhưng vô hiệu hóa sự tương tác có lẽ hoặc chỉ thay đổi màu/đường viền của nút để nó giữ màu văn bản của bạn? Chỉ cần tự hỏi nếu bạn đã cố gắng sửa chữa này, tôi biết những gì bạn đang nói mặc dù. – Luke
mmmm .. tôi đoán tôi có thể thiết lập hình ảnh/hình ảnh thay thế cho cùng một "khuyết tật" da để người dùng sẽ hiểu rằng điều này bị vô hiệu hóa. Nhưng nó sẽ làm cho mã rất xấu xí - tôi sẽ phải kiểm tra trong mỗi chức năng hành động nếu nút bị vô hiệu hóa hoặc không –
Trong iOS, tôi chỉ có thể làm điều này: myButton.userInteractionDisabled = YES và sau đó thiết lập alpha để cho nó sự xuất hiện của bị vô hiệu hóa. Tôi tưởng tượng bạn có thể làm điều gì đó tương tự với NSButton của bạn. Chỉ cần xác nhận, bạn chỉ cần đặt thuộc tính được bật thành NO, đây là nơi vấn đề màu văn bản của bạn đến từ đâu? – Luke