【问题标题】:Displaying NSPopOver显示 NSPopOver
【发布时间】:2013-03-01 09:25:33
【问题描述】:

我有一个从具有所有功能的 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 中调用该弹出框方法?我需要双击一行并显示弹出窗口。我该怎么做?谢谢。

【问题讨论】:

  • 不就是 [self displayPopover] 将位置传递给它以显示弹出框吗?
  • stackoverflow.com/questions/tagged/nspopover 这个链接肯定会让你不高兴。对 nspopover 没有帮助。原因是 osx 中的人很少。
  • 是的。我尝试使用 [self displayPopover]。但它没有显示
  • 我已将 IBAction 连接到 tableview 单元格。我应该如何连接弹出框?
  • 或者至少告诉我当我将鼠标指针放在表格视图的单元格上时如何显示弹出框。

标签: objective-c macos cocoa nspopover


【解决方案1】:

显示坐标似乎很偏离。弹出框的矩形是相对于 ofView 参数的。这里从 (0, 0) 开始,它应该在 keywindow.contentView 的左上角显示弹出框。然后微调位置。您可能必须从 IBAction 传入实际的矩形(可能是表格单元格边界)。弹出框的视图矩形中的大小部分很重要,因为弹出框相对于它移动。我还会传入视图以将弹出框附加到,因为有时单击它时视图不会成为关键。

请注意,仅当您计划将其分离到浮动窗口中时,才需要弹出窗口的委托。也试验一下这种行为。从 NSPopoverBehaviorTransient 开始。我不确定您实际上与应用程序定义的行为有什么关系,但至少对于瞬态行为它对我来说很好。

最后,您无需在每次显示弹出框时都重新创建它。只需在 awakeFromNib 中进行设置,然后在每次需要时调用showRelativeToRect...。随着瞬态行为,它会自动消失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 2017-11-21
    • 2018-10-28
    相关资源
    最近更新 更多