Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 如何定位NSpover_Cocoa_Nsview_Nsoutlineview_Nsviewcontroller_Nspopover - Fatal编程技术网

Cocoa 如何定位NSpover

Cocoa 如何定位NSpover,cocoa,nsview,nsoutlineview,nsviewcontroller,nspopover,Cocoa,Nsview,Nsoutlineview,Nsviewcontroller,Nspopover,我有一个OSX应用程序,它使用NSViewController在我的NSView中交换输入输出视图。其中一个视图是NSOutlineView。现在,我希望在用户双击大纲视图中的一行时显示一个nspover。目前,我使用的是弹出框: NSRect theRect = [[NSApp keyWindow] convertRectFromScreen: NSMakeRect(700, 400, 5, 5)]; [myPopover showRelativeToRect: theRect // Wind

我有一个OSX应用程序,它使用NSViewController在我的NSView中交换输入输出视图。其中一个视图是NSOutlineView。现在,我希望在用户双击大纲视图中的一行时显示一个nspover。目前,我使用的是弹出框:

NSRect theRect = [[NSApp keyWindow] convertRectFromScreen: NSMakeRect(700, 400, 5, 5)];
[myPopover showRelativeToRect: theRect // Window Coordinates
                        ofView: [[NSApp keyWindow] contentView]
                 preferredEdge: NSMinYEdge];
这会使nspover出现在应用程序的底部。这是可行的,但我希望能够让弹出框显示在NSOutlineView的单击行的正下方。我交换的每个视图都由NSViewController控制,我想我可以使用NSViewController的view属性识别视图位置。但是,如果我将
[[NSApp keyWindow]contentView]
替换为
myViewController.view
,我会收到一个错误,即视图没有窗口,NSPover崩溃。显然,我很难1)找到NSView中单击行相对于主窗口的坐标2)理解为什么我的视图没有窗口。如果有人能给我一些建议,帮助我理解这些问题,我将不胜感激

更新06/02/2013 我仍然在努力解决我的问题,但我发现,如果我通过MainWindowController(myControlledView)访问视图的属性,我可以获得视图的正确坐标。然后,当我询问视图的原点和帧大小时,我得到了正确的值。我的VC将自定义视图作为NIB文件加载,当我询问加载视图的来源时,我得到(0,0)。我认为视图相对于窗口的位置将保持不变,即使我将视图作为笔尖加载?我可以将视图原点传递给我的VC,从而正确设置NSPopover,但这似乎相当麻烦,我认为可以通过VC正确访问NIB加载的视图原点

managingViewController *vc = [viewControllers objectAtIndex:[viewIndex intValue]];
[self.currentViewController.view removeFromSuperview];
[self setCurrentViewController:vc];
[self.myControlledView addSubview:vc.view];
NSLog(@"My origin: %f %f",vc.view.frame.origin.x,vc.view.frame.origin.y);
这导致了
:我的来源:0.0000000.000000
,而这不是我要寻找的,而这:

NSLog(@"My origin: %f %f",self.myControlledView.frame.origin.x,self.myControlledView.frame.origin.y);
结果来源正确:
My origin:17600000038.000000

很明显,我对视图和窗口有些不理解。非常感谢您的帮助


谢谢你的建议和帮助!干杯,特隆当我明白我在做什么的时候,这就变得很容易了。原来我有两个currentViewController的分配。一个在IB中分配,另一个在代码中分配。当我删除IB创建的VC时,我可以与正确的代码启动视图交互,并且我可以使用(跟踪的)鼠标的位置定位我的NSPopover:

鼠标位置用于定义my rect的坐标:

NSRect theRect = NSMakeRect([self.myMouseX floatValue] + 5,[self.myMouseY floatValue],1,1);

[myPopover showRelativeToRect: theRect // Window Coordinates
                       ofView: [[NSApp keyWindow] contentView]
                preferredEdge: NSMaxXEdge];

干杯,特隆当我明白我在做什么的时候,这就变得很容易了。原来我有两个currentViewController的分配。一个在IB中分配,另一个在代码中分配。当我删除IB创建的VC时,我可以与正确的代码启动视图交互,并且我可以使用(跟踪的)鼠标的位置定位我的NSPopover:

鼠标位置用于定义my rect的坐标:

NSRect theRect = NSMakeRect([self.myMouseX floatValue] + 5,[self.myMouseY floatValue],1,1);

[myPopover showRelativeToRect: theRect // Window Coordinates
                       ofView: [[NSApp keyWindow] contentView]
                preferredEdge: NSMaxXEdge];

干杯,Trond

您说您正在使用NSViewController(以某种方式)在NSView中交换视图。VC的观点是什么?如果不是父视图,那么VC拥有什么视图?您将其中哪一个(如果有)添加到窗口的视图层次结构?我使用几个VCs来控制添加到superview的NSView的内容。交换视图时,我调用以下方法:管理ViewController*vc=[viewControllers objectAtIndex:[viewIndex intValue]];[self.currentViewController.view从SuperView移除];[self-setCurrentViewController:vc];[self.mycontrolledwiew addSubview:vc.view];您说您正在使用NSViewController(以某种方式)在NSView中交换视图。VC的观点是什么?如果不是父视图,那么VC拥有什么视图?您将其中哪一个(如果有)添加到窗口的视图层次结构?我使用几个VCs来控制添加到superview的NSView的内容。交换视图时,我调用以下方法:管理ViewController*vc=[viewControllers objectAtIndex:[viewIndex intValue]];[self.currentViewController.view从SuperView移除];[self-setCurrentViewController:vc];[self.mycontrolledwiew addSubview:vc.view];