2010-09-17 40 views
5

Cách tốt nhất để tạo NSButton với hình nền tùy chỉnh là gì, có thể có chiều rộng thay đổi, mà không làm cho khung bezel góc bị kéo dài? Tôi biết có những phương pháp thuận tiện để làm điều này với UIButton: http://jainmarket.blogspot.com/2009/04/create-uibuttonbutton-with-images.html nhưng tôi đã không nhìn thấy bất cứ điều gì tương tự như trong NSButton.NSButton có chiều rộng kích thước thay đổi, góc tròn

Trả lời

7

Tôi cần có nền nút tùy chỉnh, dưới đây là cách tôi đã làm. Tôi đã thực hiện một lớp con NSButton và overrode drawRect phương pháp:

- (void)drawRect:(NSRect)dirtyRect 
{ 
    // My buttons don't have a variable height, so I make sure that the height is fixed 
    if (self.frame.size.height != 22) { 
     self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, 
           22.0f); 
    } 
    // 
    switch (self.state) { 
      // Onstate graphics 
     case NSOnState: 
      NSDrawThreePartImage(self.bounds, 
           [NSImage imageNamed:@"btnmain_lb_h.png"], [NSImage imageNamed:@"btnmain_bg_h.png"], [NSImage imageNamed:@"btnmain_rb_h.png"], 
           NO, NSCompositeSourceAtop, 1.0, NO); 
      // Offstate graphics 
     default: 
     case NSOffState: 
      NSDrawThreePartImage(self.bounds, 
           [NSImage imageNamed:@"btnmain_lb.png"], [NSImage imageNamed:@"btnmain_bg.png"], [NSImage imageNamed:@"btnmain_rb.png"], 
           NO, NSCompositeSourceAtop, 1.0, NO); 
      break; 
    } 

    [super drawRect:dirtyRect]; 
} 

Sau đó, tôi có thể đặt các nút sử dụng giao diện Builder, và để có được đồ họa tùy chỉnh tôi chỉ phải thay đổi lớp để phân lớp mới của tôi.

1

NSButton không có cùng phương pháp tiện lợi cho hình nền như UIButton (kỳ lạ và đây là hy vọng Apple sẽ thu hẹp khoảng cách đó). Bạn sẽ cần phải tạo một nút tùy chỉnh của tôi phân lớp của tôi NSView và tự xử lý các chiều rộng và góc biến. Tôi không nghĩ rằng nó sẽ dễ dàng, nhưng tôi không nghĩ rằng nó sẽ là khó khăn khủng khiếp hoặc.

+0

xấu hổ phải không? :) Không giống như phương pháp tiện lợi trong UIButton thực sự là thuận tiện. – BadPirate

2

này làm việc hoàn toàn tốt đẹp cho tôi:

[self.addBuddyCommitButton.cell setBezelStyle:NSRoundedBezelStyle]; 
+0

sau khi ghi đè drawBezelWithFrame: (NSRect) khung inView: (NSView *) controlView nó hoạt động! – tomeron11

0

Video này giải thích một phương pháp mà có vẻ là đơn giản và chỉ cần một hình ảnh của nút: http://youtu.be/7MZJxPOo_xU

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