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 回答