2014-06-09 18 views
12

Tôi có một số NSViews% NSImageView mà tôi đã tạo trong IB, làm thế nào tôi có thể thiết lập màu nền cho mỗi khi ứng dụng khởi độngFromNib?Đặt màu nền của NSView và NSImageView trong ca cao

Sau khi google và tìm kiếm ở đây, tôi thấy rằng có thể được thực hiện bằng cách tạo lớp Tùy chỉnh của NSView hoặc NSImageView và đặt màu trong phương thức drawRect của chúng.

Có cách nào khác để tôi có thể đặt màu nền và không cần phải tạo thêm lớp cho Chế độ xem/ImageView.

Cảm ơn

+0

AFAIK không có cách nào khác. Bạn cần phải xem lớp con để đặt màu nền. – GoodSp33d

Trả lời

35

Hai cách để đặt màu nền cho NSView/NSImageView mà tôi tìm thấy.

Đầu tiên: By subclassing của NSView/NSImageView

- (void)drawRect:(NSRect)aRect 
{ 
    [[NSColor redColor] set]; 
    NSRectFill([self bounds]); 
} 

Thứ hai:

Không muốn làm cho lớp con, như bạn đã đề cập trong câu hỏi của bạn. Sau đó

[_backgroundView setWantsLayer:YES]; 
[_backgroundView.layer setBackgroundColor:[[NSColor redColor] CGColor]]]; 

Đây _backgroundView là IBOutlet/đối tượng của NSView/NSImageView. Bạn chỉ cần truy cập lớp NSView/NSImageView để cho anh ta backgroundcolor mà không cần phân lớp chúng.

10

bạn không thể vẽ một cái gì đó tùy chỉnh mà không subclassing NSView tuy nhiên bạn có thể thay đổi màu nền của lớp.

[yourView setWantsLayer: YES]; 
[yourView.layer setBackgroundColor: [NSColor redColor].CGColor]; 
0

Bạn có thể áp dụng một màu nền cho bất kỳ hậu duệ NSView qua Interface Builder bằng cách thực hiện một phần mở rộng chủng loại như thế này:

@implementation NSView (backgroundColor) 

- (void)setBgColor:(NSColor *)color { 
    // 
    [self setWantsLayer:YES]; 
    self.layer = [CALayer layer]; 
    [self.layer setBackgroundColor:[color CGColor]]; 
} 

@end 

và cung cấp giá trị cho nó trong User Defined Runtime Thuộc tính bảng trong IB:

enter image description here

Các vấn đề liên quan