gpt4 book ai didi

objective-c - 显示 NSPopOver

转载 作者:行者123 更新时间:2023-12-03 17:54:50 24 4
gpt4 key购买 nike

我有一个类,它是从带有 xib 的窗口 Controller 派生的,它具有所有功能。在这个 xib 中,我有一个显示大厅列表的表格 View 。如果我双击大厅名称,我会看到一个弹出窗口,其中显示该大厅的功能。我有一个 View Controller 类,我想在其中以编程方式创建弹出窗口,

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];
}

在我的窗口 Controller 类中,我有一个类似的方法,

-(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 中调用该弹出窗口方法?我需要双击一行并显示弹出窗口。我该怎么做?谢谢。

最佳答案

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

请注意,仅当您计划将弹出窗口分离到 float 窗口时才需要委托(delegate)。也尝试一下这种行为。从 NSPopoverBehaviorTransient 开始。我不确定您实际上需要对应用程序定义的行为做什么,但至少对于 transient 行为,它对我来说效果很好。

最后,您不需要每次显示弹出窗口时都重新创建它。只需在 awakeFromNib 中设置它,然后每次需要时调用 showRelativeToRect... 即可。随着 transient 行为,它会自动消失。

关于objective-c - 显示 NSPopOver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15154372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com