首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSTextFieldCell坐标

NSTextFieldCell坐标
EN

Stack Overflow用户
提问于 2009-05-27 21:05:48
回答 4查看 2.2K关注 0票数 2

我正在尝试获取NSTextFieldCell的NSPoint坐标,但NSTextFieldCell不是从NSView继承的,因此没有frame方法。有什么办法解决这个问题吗?

我正在尝试使用Matt Gemmel的MAAttachedWindow将小助手弹出窗口附加到某些元素。我想将它附加到窗口上的一个区域,除了手动处理x和y坐标之外,我不确定如何获得坐标。

EN

回答 4

Stack Overflow用户

发布于 2009-05-27 21:19:33

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

代码语言:javascript
复制
NSRect cellFrame = [[theCell controlView] frame];
NSPoint origin = cellFrame.origin;
//..

但是,如果NSTextFieldCell是更复杂控件的一部分,例如NSTableView,其中单个单元格在多个地方使用,则需要更多信息才能确定正确的矩形。NSCell提供了representedObject方法,该方法可以帮助您确定NSTableView中的哪个对象在特定时刻由该单元格表示。在不了解你的具体情况的情况下,我不知道在这方面还需要提供多少细节。

下面是一种可能的解决方案,假设您能够从存储在representedObject中的对象中辨别行和列信息

代码语言:javascript
复制
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];
票数 3
EN

Stack Overflow用户

发布于 2009-05-27 21:09:17

单元是一个可重用的对象,它属于一个NSControl (一个NSView子类)。它没有原点,因为它实际上并不代表屏幕上的一个位置,它取决于控件(它有一个特定的框架矩形)来在需要的地方和时间绘制它。以表格视图为例,它可能使用单个单元格,该单元格在每行的多个位置重新绘制。

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

票数 2
EN

Stack Overflow用户

发布于 2009-05-27 21:55:14

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/918008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档