NSTableView 中 NSTextFieldCell 的自定义字段编辑器

2024-03-01

我有一个习惯NSTableView子类充满了几个自定义NSTextFieldCell子类。我希望能够使用箭头键更改编辑的单元格。

我可以通过创建自定义字段编辑器(通过子类化NSTextView)并从窗口委托返回它,如下所示:

- (id) windowWillReturnFieldEditor:(NSWindow *) aWindow toObject:(id) anObject {
    if ([anObject isEqual:myCustomTable]) {
        if (!myCustomFieldEditor) {
            myCustomFieldEditor = [[MyNSTextViewSubclass alloc] init];
            [myCustomFieldEditor setTable:anObject];
        }
        return myCustomFieldEditor;
    }
    else {
        return nil;
    }
}

In MyNSTextViewSubclass,我覆盖moveUp:, moveDown:, moveLeft:, and moveRight:方法来实现我想要的功能,并且一切正常。唯一的问题是字段编辑器的行为不再像文本字段单元格编辑器。例如,当我按 Enter 键时,它会在文本字段中插入换行符,而不是结束编辑。

如何创建一个自定义字段编辑器,其响应与默认字段编辑器的响应完全相同NSTextFieldCell(除了我将覆盖的那四个函数)?或者有更好的方法来改变功能moveUp:, moveDown:, moveLeft:, and moveRight:?

EDIT:当选择文本字段进行编辑时,字段编辑器似乎将文本字段设置为其委托。在这种情况下,仅附加到control:textView:doCommandBySelector:如上所述的委托方法here http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/TextEditing/Tasks/FieldEditor.html#//apple_ref/doc/uid/20001815-131200,但是当我在我的任一中实现该功能时NSTextFieldCell子类或我的NSTableView子类,它永远不会被调用。为什么不?


我几乎花了一整天的时间来解决这个问题,但我终于弄清楚了。为了能够使用箭头键遍历我的 NSTableView 子类,我必须将以下方法添加到我的 NSTableView 中:

- (BOOL)textView:(NSTextView *)aTextView doCommandBySelector:(SEL)aSelector {
    if(aSelector == @selector(moveUp:)) {
        [self moveSelectionToPreviousRow];
        return YES;
    } else if(aSelector == @selector(moveDown:)) {
        [self moveSelectionToNextRow];
        return YES;
    } else if(aSelector == @selector(moveLeft:)) {
        [self moveSelectionToPreviousColumn];
        return YES;
    } else if(aSelector == @selector(moveRight:)) {
        [self moveSelectionToNextColumn];
        return YES;
    }
    return NO;
}

这是因为默认的字段编辑器是 NSTextView (不是 NSControl),所以我需要使用<NSTextViewDelegate>协议。设置为其委托的视图是 NSTableView,notNSTextFieldCell。这moveSelectionTo...函数是在我的 NSTableView 子类中定义的自定义函数,用于跟踪当前编辑的单元格,然后相应地移动它。

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

NSTableView 中 NSTextFieldCell 的自定义字段编辑器 的相关文章

随机推荐

  • 从列表 python 创建字典

    我有很多这种格式的列表 1 O1 0 0000 0 0000 2 AP 35 0000 105 0000 3 EU 47 0000 8 0000 我需要创建一个字典 其中键作为列表中的第一个元素 值作为整个列表 没有一个键是重复的 最好的方
  • 如何使用 c# .net 删除前缀

  • Shibboleth 成功登录后自定义重定向

    我需要在 Shibbolethlogin 之后和重定向到 SP url 之前执行操作 对我来说 最好的解决方案是 Shib 页面登录 gt 登录正常 gt 重定向到我的自定义页面 gt 重定向到 sp url 如果可能的话我该怎么做 有可能
  • 是否可以在 JavaScript 中确定命名窗口是否打开?

    我正在开发一个站点间单点登录项目 并且遇到了一个相当小的问题 当用户注销 父 站点时 需要在包含 子 站点的弹出窗口中加载特定页面 但是 我无法存储对返回值的引用window open 因为必须允许用户在注销之前在每个站点上导航到他们喜欢的
  • 如何从系统函数调用中杀死后台进程

    如何杀死使用 C 语言中的系统函数调用执行的后台进程 例如 我有一个编译的应用程序 称为 fooprocess 然后我想编写一个程序 使用系统函数在后台执行 fooprocess 应用程序 请参阅下面的代码 const char app f
  • 如何将第 3 方 JAR 打包到 EJB jar 中?

    我有一个旧的 J2EE 应用程序 J2EE 1 3 它打包到 EAR 中 并且在 EAR 中 有 WAR 和 EJB JAR 现在 其中一个 EJB JAR 需要引用一些第 3 方库 JAR 那么打包这些 JAR 的最佳位置是什么以及如何打
  • UITableView 部分标题视图在滚动时消失

    我目前在 UITableView 中使用了一些自定义节标题视图 加载 UITableView 时视图会出现 但滚动时会消失 我看过这篇文章 但它似乎已经过时了 tableView 部分标题消失 SWIFT https stackoverfl
  • 如何在 R 中绘制美国各州?

    我可以在整个美国地图上绘制特定州的数据 但我只想用数据绘制州地图 俄克拉荷马州 我怎样才能在R中做到这一点 ggplot geom polygon data all states aes x long y lat group group c
  • 多处理和并行处理之间的比较

    有人能告诉我多处理和并行处理之间的确切区别吗 我有点困惑 感谢您的帮助 多重处理 多重处理是使用两个或多个中央处理单元 单个计算机系统中的 CPU 该术语还指 系统支持多个处理器和 或的能力 在他们之间分配任务的能力 并行处理 在计算机中
  • 如何知道其他线程是否完成?

    我有一个对象 其方法名为StartDownload 启动三个线程 当每个线程执行完毕时如何收到通知 有没有办法知道一个 或全部 线程是否已完成或仍在执行 您可以通过多种方式执行此操作 Use 线程 join http java sun co
  • Rollup - 允许 :scss 文件中的导出语句导入到 js 中

    我们有一个用 Rollup 构建的 Vue 组件库 开发还处于早期阶段 但到目前为止一切进展顺利 除了这一件事 我们无法从 scss 文件中导出 SASS 变量并将它们导入到 js 文件中 我们习惯于使用 exportWebpack的声明s
  • TextView 是否缩放其字体大小以填充父级?

    有没有办法让 TextView 选择字体大小 使其填充可用的任何空间 例如
  • 如何在 Visual Studio IDE 中关闭显示空白字符

    我不知道我做了什么 但我不知道如何摆脱左边的那些箭头 CTRL R CTRL W Toggle showing whitespace 或在编辑菜单下 编辑 gt 高级 gt 查看空白 顺便说一句 您似乎也在使用选项卡 通常的做法是让 IDE
  • void 函数 Swift3 中出现意外的非 void 返回值

    我有一个返回类对象或 nil 的函数 该函数的目的是检查是否Chat存在 聊天 ID 存储在 MySQL 中 如果 ID 存在 我会执行 Firebase 引用来获取快照 然后获取对象 如果 ID 不存在 则返回 nil func find
  • 是否可以在 XPath 中进行“不”匹配?

    是否可以创建一个匹配所有非特定名称的子节点的 XPath 表达式 例如 a b b a
  • 我收到 java.lang.NoClassDefFoundError: org/springframework/web/context/WebApplicationContext

    我在类路径中添加了 spring web 4 0 jar 它包含类 org springframework web context WebApplicationContext 但是当我尝试在 Eclipse 中运行它时 它显示了一个错误 o
  • 论坛/论坛是在大型 PHP 框架之一之上编写的

    我正在寻找一个新的论坛软件 线程 或公告板 平面 分区 我想知道是否有基于大型 PHP 框架之一的实现 CodeIgniter Kohana Yii CakePHP ZF Seagull Fusebox Symfony eZ Prado 或
  • 接收缓冲区的限制

    我通过以下方式与客户端建立了连接 gen tcp listen 1234 binary packet 0 reuseaddr true active false recbuf 2048 此代码执行消息处理 loop Socket gt in
  • 为什么我们必须在 Django 设置中提供 WSGI_APPLICATION 变量

    我是一名 Django 开发新手 所以如果这个问题没有意义 请原谅我 我们提供一个变量叫做WSGI APPLICATION在 django 设置中ROOT URLCONF和一些其他设置变量 我们也在 wsgi py 文件中提供设置文件路径
  • NSTableView 中 NSTextFieldCell 的自定义字段编辑器

    我有一个习惯NSTableView子类充满了几个自定义NSTextFieldCell子类 我希望能够使用箭头键更改编辑的单元格 我可以通过创建自定义字段编辑器 通过子类化NSTextView 并从窗口委托返回它 如下所示 id window