0

(注: 質問は以前にも出されており、1 年以上前に決定的ではない結果が得られました。願わくば、もう少し詳しく知り、解決できますか?)

ダブルクリックしたときに NSCollectionItem の上に NSPopover を表示しようとしています。私の 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 の上に表示する方法を知っている人はいますか?

4

1 に答える 1

0

この問題を解決したかどうかはわかりませんが、以前にこれを行ったことがあります。私は最近、NSCollectionViewItem の NSTextField に関連する NSPopOver を表示したいと考えていました。問題はありませんでしたが、ある時点で relativeToRect: パラメータが間違っていて、ポップオーバーが表示されませんでした。ポップオーバーを表示するときは、常にこの同じ形式を使用します

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

これらの値が正しいことを確認し、バインディングや接続を忘れるなど、IB でばかげた間違いを犯していないことを確認することをお勧めします (私の失敗の 90%)。

これがあなたの問題に役立つことを願っています

于 2012-09-04T05:44:06.163 に答える