0

我想扩展 NSTextField 的功能。我想要实现的目标是:

更改插入符号的外观和感觉。

检测文本何时达到一定数量的字符,然后在该限制之后对文本进行不同的着色。*

在花了相当长的时间谷歌搜索后,令我非常沮丧的是,我发现数百个点击简单地说明“Sublass NSTextField 并使用此代码。”,令我感到羞耻的是,我发现自己无法准确地了解如何做到这一点。

如果有人能给我一个实现我上面列出的两件事之一的子类的工作示例,以及关于如何实现代码的说明*,我将非常感激,这样我就可以通过查看一些内容来尝试弄清楚它是如何工作的实际的实时代码。


对于我迟到的回复,我深表歉意!

向你们所有人道歉。我家里有一个绞痛婴儿,正如你们(或至少你们中的那些有孩子的人)可以想象的那样,这会占用你相当多的可用时间。谢谢大家的回复。

我看到我的主要问题之一是我对代表和出口没有足够的了解。我已经购买了这里推荐的书(以及许多其他地方。我收集了某种“圣经”),我正在研究它,因为我们在这些天的几个沉默时间里说话。:)

但是,尽管我可以看到它对我来说将是一个不可或缺的工具,但我仍然通过学习示例而不是阅读理论来获得最多的理解*,所以如果有人会创建一个具有相关类的适当子类的项目,我将非常感激因为我知道我可能不应该扩展 NSTextfield 类?

我会立即将 Mark Thalmans 的帖子标记为答案,因为我确信这是一个适当的“傻瓜”回复,但我会坚持几天,因为我真的很喜欢一个文件来细读。但我并不忘恩负义!

哦,还有;当我说我在我真正知道的语言中没有那么无用时,请相信我。只是这些概念与 Interface Builder 和 GUI 与代码的连接对我来说是非常陌生的。我通常只是编写代码并保持不变。


*是的,我的第一个小培训项目确实是一个 Twitter 实用程序。

*喜欢孩子

*并不是说阅读理论对我也没有巨大的价值。如果没有 Colin Moock 的 AS3 权威指南,我就不会成为现在的我

4

5 回答 5

5

setInsertionPointColor:将负责设置插入符号颜色,并且使用委托方法将是在字符数更改后为文本着色的最佳方法。一般来说,Cocoa中的很多类都是这样的;您可以对它们进行子类化,但您需要更改的大部分功能都在委托方法中。

于 2009-03-03T14:25:18.043 回答
4

NSTextField很特别,因为它实际上并没有实现文本编辑。这是由一个共享的(每个窗口)完成的NSTextView,称为字段编辑器。您可以为给定的NSTextField. 这是通过子类化NSWindow(!) 和覆盖来规范地完成的-fieldEditor:forObject:。但是,当我查找此内容时,我发现了NSTextFieldCell's-setUpFieldEditorAttributes:方法,它看起来好像可以返回与它所提供的不同的字段编辑器。

推荐阅读:Cocoa 的控制和单元编程主题文本系统概述

于 2009-03-03T20:18:30.487 回答
3

马丁,

我从“新建文件”对话框开始,选择左侧的“Cocoa”,然后选择 Objective-C 类。

这将生成以下代码,没有注释。然后您需要做的就是将标题的“@interface”行中的 NSObject 更改为“NSTextView”,并且您有一个工作子类。如果您使用的是 XCode 3.0,您可以转到 Interface Builder 并将您的 NSTextField 的类更改为“MyTextView”。

您还应该阅读 Aaron Hillegass 的书“Mac OS X 的 Cocoa Programming,第三版”,如果您还没有,它已经为 Leopard 更新了。

祝你好运。


#import <Cocoa/Cocoa.h>


@interface MyTextView : NSTextView {
 // Outlets & Members go here
}
// Actions & messages go here
@end


#import "MyTextView.h"


@implementation MyTextView

@end

于 2009-03-03T14:24:04.647 回答
3
  1. 如果你真的必须继承它,你必须继承NSTextFieldCell. 有关信息NSCells在线获取

  2. 如果不是绝对必要,不要对单元格进行子类化。使用委托方法

  3. 至少可以使用NSTextField's bindings更改颜色,使用那些。

于 2009-03-03T20:21:33.460 回答
1

您可能还可以获得格式化程序所需的一些功能。

于 2009-03-03T22:58:17.093 回答