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/9/opencv/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
Objective c NSTextFieldCell坐标_Objective C_Cocoa - Fatal编程技术网

Objective c NSTextFieldCell坐标

Objective c NSTextFieldCell坐标,objective-c,cocoa,Objective C,Cocoa,我试图获取NSTextFieldCell的NSPoint Cooridate,但是NSTextFieldCell没有从NSView继承,因此没有frame方法。有什么办法可以解决这个问题吗 我试图使用Matt Gemmel的MAAttachedWindow将小助手弹出窗口附加到某些元素。我想将其附加到窗口上的某个区域,除了通过手动修改x和y坐标将其拼凑在一起,我不确定如何获取坐标。单元格是NSControl(NSView子类)拥有的可重用对象。它没有原点,因为它实际上并不表示屏幕上的某个位置,而

我试图获取NSTextFieldCell的NSPoint Cooridate,但是NSTextFieldCell没有从NSView继承,因此没有frame方法。有什么办法可以解决这个问题吗


我试图使用Matt Gemmel的MAAttachedWindow将小助手弹出窗口附加到某些元素。我想将其附加到窗口上的某个区域,除了通过手动修改x和y坐标将其拼凑在一起,我不确定如何获取坐标。

单元格是NSControl(NSView子类)拥有的可重用对象。它没有原点,因为它实际上并不表示屏幕上的某个位置,而是由控件(具有特定的框架矩形)在需要的位置和时间绘制。例如,考虑一个表视图,它可能使用一个单元格,该单元格在每行的多个位置重新绘制


当单元格被绘制到屏幕上时,控件会向其传递一个框架矩形,在大多数情况下,这就是您所需要的。您还可以利用NSCell的大小调整方法,它可以告诉您需要多少空间来显示其内容。

您可以调用
[theCell controlView]
以获取对拥有特定单元格的控件的引用。如果
NSTextFieldCell
对象是简单控件的一部分,例如
NSTextField
,则以下内容应足够:

NSRect cellFrame = [[theCell controlView] frame];
NSPoint origin = cellFrame.origin;
//..
但是,如果
NSTextFieldCell
是更复杂控件的一部分,例如
NSTableView
,其中单个单元格用于多个位置,则需要更多信息来确定正确的矩形
NSCell
提供了方法
representedObject
,它可以帮助您确定
NSTableView
中的哪个对象在特定时刻由单元格表示。如果不了解你的具体情况,我不知道在这方面还需要提供多少细节

这里是一个可能的解决方案,假设您能够从存储在
representedObject
中的对象中辨别出行和列信息:

NSTableView * tableView = [theCell controlView];
id cellObject = [theCell representedObject];

NSInteger row = //... determine from representedObject
NSInteger col = //... determine from representedObject

NSRect cellFrame = [tableView frameOfCellAtColumn:col row:row];

它没有坐标。没有可以得到的。单元格的工作方式是视图告诉单元格“”

因此,如果您不在某个单元的绘图方法中,并且确实需要坐标,则需要询问拥有该单元的视图。通常,这是
[cell controlView]


(可能您考虑的是UIKit?UITableViewCells与NSCells非常不同。)

对于使用MAAttachedWindow,您是否可以使用控件的框架(如果是单单元格控件),或者对于具有特定行的表视图,是否可以使用NSTableView布局方法之一<例如,code>rectOfRow:或
rectOfColumn:
。您可以覆盖NSTextFieldCell并将窗口定位在其中一种绘图方法中,但如果可能的话,我会将其保存为我最后的绝对选择。

那么有没有办法计算出单元格的坐标或包含该单元格的表格行?获取单元格的绘图框实际上取决于您尝试执行的操作。你能编辑你的问题来更详细地解释吗?controlView并不能保证设置正确。我记得有一次在自定义表视图单元格中尝试依赖它时,发现它总是为零。