子类化NSTextField

时间:2009-03-03 13:06:41

标签: objective-c cocoa xcode interface-builder

首先关闭;我是Cocoa的一个完全新手,所以请跟我一起询问我确信这是一个愚蠢和完全新的问题。

我的情况如下:我想扩展NSTextField的功能。我希望实现的目标是:

改变插入符的外观。

检测文本何时达到一定数量的字符,然后以不同方式对文本后的文本着色。 *

令我非常沮丧的是,经过一段时间的谷歌搜索,我发现数百个点击简单地说“Sublass NSTextField并使用这个代码。”,而我的羞辱让我发现自己无法确切地知道如何做到这一点。

如果有人能给我一个实现上面列出的两件事之一的子类的工作示例,以及关于如何实现代码的指令*,我将非常感激,因此我可以尝试找出它是如何工作的看一些实际的实时代码。


我对我迟到的回应非常抱歉!

向所有人道歉。我家里有一个绞痛的婴儿,而且你(或者至少那些有孩子的人)可以想象这会花费你很多的时间。谢谢大家的回复。

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

但是虽然我可以看到它对我来说是一个不可或缺的工具但我仍然从学习实例而不是阅读理论中获得最多的理解*所以如果有人创建一个具有适当子类的项目,我将非常感激。相关的课程,因为我明白我可能不应该扩展NSTextfield类?

我会立刻将马克·塔尔曼斯的帖子标记为答案,因为我确信这是一个适当的“傻瓜”回应,但我会坚持几天,因为我真的很喜欢文件来阅读。但我不是忘恩负义!

哦,而且;当我说我在实际知道的语言中没有那么无用时,请相信我们。只是这些与Interface Builder和GUI连接到代码的概念对我来说是未知的。我通常只是编写代码并保留它。


*是的,我的第一个小培训项目确实是推特实用工具。

*喜欢孩子

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

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

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

推荐阅读:Control and Cell Programming Topics for CocoaText System Overview

答案 2 :(得分: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

答案 3 :(得分:3)

  1. 如果你真的必须将它子类化,你必须继承NSTextFieldCell。关于NSCells的信息是available online

  2. 如果不是绝对必要,不要对单元格进行子类化。使用delegate methods

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

答案 4 :(得分:1)

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