0

(注:問題has been asked before,以低於決定性的結果在一年前我希望我們現在更知道一點,並能解決嗎?)在NSCollectionView中顯示NSPopover?

我試圖做一個NSPopover顯示了一個多NSCollectionItem當它被雙擊時。我的NSCollectionView設置正確並接收輸入。

(如果我複製粘貼代碼到其他的NSView子類,它工作得很好有一個與NSCollectionView東西,似乎搞亂事情了。)

代碼:

BIECollectionViewItem。^h

#import <Cocoa/Cocoa.h> 

@class BIEAppDelegate; 

@interface BIECollectionViewItem : NSView { 
    IBOutlet NSPopover *popover; 
} 

@end 

BIECollectionViewItem.m

#import "BIECollectionViewItem.h" 

@implementation BIECollectionViewItem 

- (id)initWithFrame:(NSRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code here. 
    } 

    return self; 
} 

- (void)drawRect:(NSRect)dirtyRect 
{ 
    // Drawing code here. 
} 

- (void)mouseDown:(NSEvent *)theEvent { 
    [super mouseDown: theEvent]; 
    if([theEvent clickCount] == 2){ 
     [popover showRelativeToRect: [self bounds] ofView: self preferredEdge: NSMaxYEdge]; 
    } 
} 

@end 

如果我在mouseDown事件中添加一條日誌語句,我可以確認事件正在被觸發。但是,NSPopover拒絕出現!

有誰知道如何讓NSPopover出現在NSCollectionView上?

+0

你在哪裏'alloc'和'init'' NSPopover'? – trojanfoe 2012-07-18 07:00:53

+0

我不是; Interface Builder正在爲我處理這個問題。我只是從IB庫中拖出了一個「NSPopover」。然後它會自動創建一個'NSPopover'對象,一個'NSViewController'(標記爲「Popover View Controller」)和一個'NSView',它包含我想要出現在彈出窗口中的接口項。我已經在主窗口中對它進行了測試,並且它都可以正常工作,但是當我將它放到'NSCollectionView'中時,它無法顯示。 – 2012-07-18 21:51:26

回答

0

不知道你是否已經解決了這個問題,但我之前做過這個。 我最近想要在NSCollectionViewItem中顯示相對於NSTextField的NSPopOver。我沒有遇到任何問題,除非有一點我得到的relativeToRect:參數是錯誤的,彈出窗口不會顯示。我在

NSView *someView; // defined elsewhere 
[MyPopOver showRelativeToRect:[someView bounds] ofView:someView preferredEdge:NSMaxXEdge]; 

我只能建議以確保您有這些值正確顯示彈出時,總是使用相同的格式,你有沒有在IB做了一些愚蠢的錯誤一樣的被遺忘的結合或連接(90%我的失敗)。

希望這有助於您的問題