我有一个类,它是从具有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中调用popover方法?我需要双击一行并显示弹出窗口。我该怎么做呢?谢谢。
发布于 2013-04-20 22:43:25
显示坐标似乎有很大的偏差。弹出框的矩形是相对于ofView参数的。从这里的(0,0)开始,它应该会在keywindow.contentView的左上角显示弹出窗口。然后微调位置。您可能必须从IBAction传入实际的矩形(可能是表单元格边界)。视图矩形中弹出式视图的大小部分很重要,因为弹出式鼠标相对于该尺寸移动。我也会传入视图来附加弹出窗口,因为有时候当你点击一个视图时,它并不会变成键。
请注意,只有在计划将popover分离到浮动窗口中时,popover的委托才是必需的。还可以对行为进行实验。从NSPopoverBehaviorTransient开始。我不确定您实际上需要对应用程序定义的行为做什么,但至少对于瞬态行为,它对我来说很好。
最后,您不需要在每次显示弹出窗口时都重新创建它。只需在awakeFromNib中设置它,然后在每次需要时调用showRelativeToRect...。随着瞬时行为的发生,它将自动消失。
https://stackoverflow.com/questions/15154372
复制相似问题