0

すべての機能を備えたxibを備えたウィンドウコントローラーから派生したクラスがあります。このxibには、ホールのリストを表示するテーブルビューがあります。ホール名をダブルクリックすると、そのホールの機能を表示するポップオーバーが表示されます。私はビューコントローラークラスを持っています。このクラスでは、プログラムでポップオーバーを作成します。

NSPopover *popover;
NSViewController *popoverViewController;

-(void)displayPopover{
    popover = [[NSPopover alloc] init];
    [popover setBehavior: NSPopoverBehaviorApplicationDefined];
    [popover setDelegate: self];
    popoverViewController = [[CHBPopover alloc] initWithNibName: @"MYViewController" bundle: nil];
    [popover setContentViewController: popoverViewController];
    [popover setContentSize: popoverViewController.view.frame.size];

    [popover showRelativeToRect: NSMakeRect(700, 400, 5, 5) 
                         ofView: [[NSApp keyWindow] contentView]
                  preferredEdge: NSMaxXEdge];
}

私のウィンドウコントローラークラスには、次のようなメソッドがあります。

-(IBAction)featuresDisplay:(id)sender{

    if([_hallNamesList selectedRow] == -1){
        [self setFeaturesList:nil];
    } 
    else {

       //[self.hallFeaturesPopOver showRelativeToRect:[_hallNamesList frameOfCellAtColumn:0 row:[_hallNamesList selectedRow]] ofView:_hallNamesList preferredEdge:NSMaxXEdge];
       // [pop.displayPopover ];
       NSDictionary *hallFeaturesDictionary;
       hallFeaturesDictionary = [_hallNames objectAtIndex:[_hallNamesList selectedRow]];
       _hallId=[hallFeaturesDictionary valueForKey:@"hallId"];
       [officeDetails setHallName:[hallFeaturesDictionary valueForKey:@"hallName"]];

       _featuresList=[conferenceHall getConferenceHallFeaturesWithDetails:officeDetails];
       NSLog(@"features list=%@",_featuresList);
      [self setFeaturesList:[conferenceHall getConferenceHallFeaturesWithDetails:officeDetails]];
    }
}

このIBActionでそのポップオーバーメソッドをどのように呼び出すのですか?行をダブルクリックしてポップオーバーを表示する必要があります。これを行うにはどうすればよいですか?ありがとう。

4

1 に答える 1

1

表示座標がかなりずれているようです。ポップオーバーの四角形は ofView パラメータに関連しています。ここで (0, 0) から始めます。これにより、keywindow.contentView の左上隅にポップオーバーが表示されます。次に、位置を微調整します。おそらく、IBAction から実際の四角形を渡す必要があります (おそらくテーブル セルの境界)。ポップオーバーはそれに関連して移動するため、ポップオーバーのビュー四角形のサイズ部分は重要です。ビューをクリックしてもキーにならない場合があるため、ポップオーバーをアタッチするビューも渡します。

ポップオーバーのデリゲートは、フローティング ウィンドウへのデタッチを実装する場合にのみ必要であることに注意してください。動作も試してみてください。NSPopoverBehaviorTransient から始めます。アプリケーションで定義された動作で実際に何をしなければならないかはわかりませんが、少なくとも一時的な動作では問題なく動作します。

最後に、ポップオーバーを表示するたびに再作成する必要はありません。awakeFromNib で設定し、showRelativeToRect...必要なときに呼び出すだけです。一時的な動作では、自動的に消えます。

于 2013-04-20T14:43:24.817 に答える