2010-11-21 33 views

Trả lời

6

đã không thực sự cố gắng này ra - và có thể có những cách tốt hơn để làm điều đó - nhưng điều này nên làm việc:

NSView* superview = [view superview]; 
[view removeFromSuperview]; 
[superview addSubview:view]; 

này sẽ di chuyển 'xem' vào phía trước của anh chị em của nó

+0

Có lẽ không hiệu quả, nhưng nó hoàn thành những gì tôi muốn, vì vậy cảm ơn. – Regan

+0

Thay vào đó, có thể đáng nghiên cứu bằng cách sử dụng phương thức 'setSubviews:'. – ArtOfWarfare

0

Các lượt xem anh chị em có thể chồng chéo có thể khó thực hiện công việc ngay trong AppKit — nó hoàn toàn không được hỗ trợ trong một thời gian dài. Thay vào đó, hãy xem xét việc đặt chúng thành CALayers. Là phần thưởng, bạn có thể sử dụng lại mã này trong phiên bản iOS của mình.

0

cũng hãy chắc chắn để cho phép các lớp cho thạch anh rendering:

... 
NSImageView *anImage = [[NSImageView alloc] initWithFrame:NSRectMake(0,0,512,512)]; 
[anImageView setWantsLayer:YES]; 
... 

cách khác, lớp của bạn không thể được trả lại một cách chính xác.

0

Câu trả lời của Pete Rossi hoạt động, nhưng hãy nhớ giữ lại chế độ xem khi bạn xóa khỏi trình giám sát.

Bạn có thể thêm này trong một thể loại trên NSView:

-(void)bringSubviewToFront:(NSView*)view 
{ 
    [view retain]; 
    [view removeFromSuperview]; 
    [self addSubview:view]; 
    [view release]; 
} 
5

Pete Rossi của câu trả lời không làm việc cho tôi, vì tôi cần phải bật chế độ xem để trước khi kéo nó với con chuột. Tuy nhiên, những đường lối cũ sau đã làm việc mà không giết chết chuột:

CALayer* superlayer = [[view layer] superlayer]; 
[[view layer] removeFromSuperlayer]; 
[superlayer addSublayer:[view layer]]; 

Ngoài ra, sau đây được đặt trong một lớp con NSView hoặc loại khá tiện dụng:

- (void) bringToFront { 
    CALayer* superlayer = [[self layer] superlayer]; 
    [[self layer] removeFromSuperlayer]; 
    [superlayer addSublayer:[self layer]]; 
} 
+0

Hoàn hảo! Chỉ cần những gì tôi cần, cảm ơn. –

0

Đây là giải pháp Swift 3.0:

extension NSView { 
    public func bringToFront() { 
     let superlayer = self.layer?.superlayer 
     self.layer?.removeFromSuperlayer() 
     superlayer?.addSublayer(self.layer!) 
    } 
} 
Các vấn đề liên quan