NSTextView 中插入符号下方的 NSPopover

2023-12-24

我知道为了显示弹出窗口,我需要一个 NSView,但我不认为有一个与插入符号相关联(在 NSTextView 内部)。有没有办法在插入符号下方显示 NSPopover?

我尝试分配 NSView 并使用它定位它(NSRect)boundingRectForGlyphRange:(NSRange)glyphRange inTextContainer:(NSTextContainer *)container,但弹出窗口不会出现(并且有一个原因,该方法返回NSRect: {{0, 0}, {0, 0}}).


我不确定您是否还在寻找答案。我最近正在开发一个项目,该项目恰好需要像您所描述的非常相似的功能。

您可以在 NSTextView 的子类中执行以下操作:

您要调用的函数是:showRelativeToRect:ofView:preferredEdge:

矩形将是 NSTextView 内的矩形,使用 NSTextView 坐标系,ofView 是 NSTextView,preferredEdge 是您希望此弹出窗口挂钩的边缘。

现在,你说你希望 PopOver 东西显示在插入符号下,那么你必须给他一个 Rect,一个 Point 是不够的。 NSTextView 有一个名为 selectedRange 的选择器,它为您提供所选文本的范围,您可以使用它来定位插入符号。

接下来是调用firstRectForCharacterRange(该类必须委托NSTextInputClient),该方法将返回NSTextView内所选文本的屏幕坐标,然后将它们转换为NSTextView坐标系,您将能够在以下位置显示NSPopover东西正确的立场。这是我执行此操作的代码。

NSRect rect = [self firstRectForCharacterRange:[self selectedRange]]; //screen coordinates

// Convert the NSAdvancedTextView bounds rect to screen coordinates
NSRect textViewBounds = [self convertRectToBase:[self bounds]];
textViewBounds.origin = [[self window] convertBaseToScreen:textViewBounds.origin];

rect.origin.x -= textViewBounds.origin.x;
rect.origin.y -= textViewBounds.origin.y;    
rect.origin.y = textViewBounds.size.height - rect.origin.y - 10; //this 10 is tricky, if without, my control shows a little below the text, which makes it ugly.

NSLog(@"rect %@", NSStringFromRect(rect));
NSLog(@"bounds %@", NSStringFromRect([self bounds]));
if([popover isShown] == false)
    [popover showRelativeToRect:rect
                         ofView:self preferredEdge:NSMaxYEdge];

这就是结果。

我想知道的是,是否有一种方法可以使用系统函数进行转换,虽然我尝试了convertRect:toView,但由于此方法是在委托中编写的,因此 NSTextView 始终具有 (0,0) 坐标系,这使得该方法毫无用处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSTextView 中插入符号下方的 NSPopover 的相关文章

  • +[NSColor selectedMenuItemColor] 如何神奇地绘制渐变?

    我正在实现一个自定义 NSMenuItem 视图显示出一个亮点 https stackoverflow com questions 6054331 highlighting a nsmenuitem with a custom view当用
  • 使用 NSTimer 传递原始参数的正确方法

    我正在使用一个调用此方法的基本计时器 void refresh id obj if obj YES doSomething 我想从代码的某些区域以及计时器调用此方法 NSTimer scheduledTimerWithTimeInterva
  • Objective-C / Cocoa Touch 中的 HTML 字符解码

    首先 我发现了这个 https stackoverflow com questions 659602 objective c html escape unescapeObjective C HTML 转义 unescape https st
  • 如何在 Objective-C 中创建委托?

    我知道代表如何工作 也知道如何使用它们 但我该如何创建它们呢 Objective C 委托是一个已分配给delegate属性另一个对象 要创建一个 您需要定义一个实现您感兴趣的委托方法的类 并将该类标记为实现委托协议 例如 假设您有一个UI
  • 为什么没有 styleMask:NSTitledWindowMask 的 NSWindow 不能成为 keyWindow?

    问题 我有一个窗口 mainWindow 和另一个窗口childWindow添加到mainWindow childWindow 是一种WindowExt班级 我为 catch 方法调用定义了这个类 NSWindow becomeKeyWin
  • TextView、iOS 和 OSX 中的彩虹文本

    我正在尝试向我的应用程序添加一些不同的文本颜色以融合到图像中 我收到了很多用户想要彩虹文本颜色并重复的输入 例如这个词 stackoverflow看起来像这样 s red t orange a yellow c green k blue o
  • 如何设置主窗口的位置和大小(以编程方式)?

    我正在使用 OS X 的最新默认项目 10 11 Xcode 7 0 它使用故事板 层次结构如下 Window Controller gt View Controller 我想设置窗口的初始位置和框架大小 显然用户可以更改它 但我希望它以一
  • NSDateComponents - EXC_BAD_ACCESS 错误

    我确信有一个简单的答案的基本问题 我正在尝试获取照片的时间戳 当我尝试访问 NSDateComponents 以检索特定日期元素 例如 日 时 我收到 EXC BAD ACCESS 错误 首先 我的代码的相关部分 formattedDate
  • Java 开发人员在 Mac OS 上遇见 Objective-C

    很多年前我就用 C 进行过开发 但现在我主要是一名 Java 软件工程师 鉴于我拥有一部 iPhone 准备下个月购买 MacBook 并且总体上对开始 Mac OS 开发 使用 Objective C 感兴趣 我想我应该提出这个问题 下一
  • 用强/弱自我打破保留周期

    我读过关于强 弱的帖子self打破保留周期 但我仍然对它们如何工作感到困惑 我理解使用 weak typeof self weakSelf self创建对自我的弱引用 但我对强引用感到困惑 据我了解 强引用是指对self这样它就不会在块结束
  • 使用 pyobjc 将元数据写入 pdf

    我正在尝试使用以下 python 代码将元数据写入 pdf 文件 from Foundation import from Quartz import url NSURL fileURLWithPath test pdf pdfdoc PDF
  • 更新到 SDK 1.3.1 后未捕获 GMSMapView 上的拖动/平移手势

    我在通过手势识别器捕获 GMSMapView 上的拖动 平移手势时遇到了一个奇怪的问题 此问题仅在从 GMS 1 2 更新到 1 3 1 后才出现 其中 引用文档 https developers google com maps docum
  • Cocoa - 在另一个 xib 上显示 xib

    谁能告诉我如何 或指导我有关信息 在另一个 xib 笔尖 上显示 xib 笔尖 我希望如何放置它 以便我可以以编程方式将它移动到主笔尖 就像这样 这显然不起作用 void drawRect NSRect dirtyRect NSRect c
  • WebView 不运行 loadHTMLString 中给出的 JavaScript

    我不明白为什么这不起作用 我的桌面上有一个 test htm 文件 如下所示 This is x 2 我有一个 WebVie
  • 原生插入符位置 macos cocoa

    我希望能够使用 cocoa 或 appleScript 获取 Mac High Sierra 中任何应用程序内的全局插入符位置 我已经使用 NSEvent 来获取键盘和鼠标挂钩 但是有没有办法获取插入符位置挂钩 插入符号与鼠标位置不同 它会
  • 如何从 Xcode 4 中的实体创建用户界面?

    我已经用核心数据进行了几天的实验 并且在过去的几个小时里尝试找出如何从 xcode 4 中的实体创建 UI 根据我一直在阅读的书籍 您必须选择将核心数据实体拖到界面生成器中的窗口中 但是当我在 xcode 4 中执行此操作时 没有任何反应
  • 如何生成Mac应用程序的安装包?

    如何为 OS X 二进制文件以及一些配置和脚本文件创建单个安装程序包 最终文件夹应如下所示 任何帮助 将不胜感激 谢谢 如果您希望将各种东西放置在不同的位置 安装程序在这里 文档在那里 支持文件在这里等等 它们也非常适合提供安装体验的可配置
  • 如何从 DTrace 脚本打印 NSString

    This question https stackoverflow com questions 1413623 how do i print a cfstringref in a dtrace action正在问同样的事情 但是当我尝试时
  • 显示器连接或断开连接时的通知

    我正在开发一个 OS X 应用程序 该应用程序在所有连接的显示器的所有可用空间上显示自定义窗口 我可以通过调用 NSScreen Screens 获取可用显示对象的数组 我目前缺少的是一种判断用户是否将显示器连接到系统或从系统断开屏幕的方法
  • 如何在可编写脚本的应用程序中将任意 AppleScript 记录传递给 Cocoa?

    我有一个 Cocoa 应用程序 其中包含 sdef XML 文件中描述的 AppleScript 字典 sdef 中定义的所有 AppleScript 类 命令等都是工作属性 除了我的 提交表单 命令 提交表单 命令是我尝试将任意信息哈希表

随机推荐