0

NSTextField の機能を拡張したいと考えています。A私が達成したいことは次のとおりです。

キャレットのルック アンド フィールの変更。

テキストが特定の文字数に達したことを検出し、その制限を超えるとテキストに異なる色を付けます。*

グーグルでかなりの時間を費やした後、私の大きな欲求不満に、単に「Sublass NSTextField とこのコードを使用してください」と述べている何百ものヒットを見つけました.

上記の 2 つのことのいずれかを達成するサブクラスの実際の例と、コードの実装方法に関する指示*を誰かが提供してくれれば、非常に感謝しています。実際のライブ コード。


返信が遅くなり、大変申し訳ありません!

皆様にお詫び申し上げます。私は家に疝痛の乳児がいますが、あなた(または少なくとも子供がいる人)が想像できるように、これはあなたの利用可能な時間のかなりの時間を占めています. ご回答ありがとうございます。

私の主な問題の 1 つは、デリゲートとアウトレットについて十分に理解していないことです。私はここで(そして他の多くの場所で、私が集めたある種の「バイブル」のような)推奨された本を購入しました。:)

しかし、それが私にとって不可欠なツールになることはわかっていますが、理論を読むよりも例を研究することから最も多くの理解を得る*ので、誰かが関連するクラスの適切なサブクラスでプロジェクトを作成してくれると非常に感謝します.おそらく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と呼ばれる共有 (ウィンドウごと) によって行われます。特定の に特別なフィールド エディタを提供できます。これは、サブクラス化(!) とオーバーライドによって標準的に行われます。しかし、これを調べていると、のメソッドが見つかりました。このメソッドは、渡されたものとは異なるフィールド エディタを返す可能性があるようです。NSTextFieldNSWindow-fieldEditor:forObject:NSTextFieldCell-setUpFieldEditorAttributes:

推奨読書: Cocoa のコントロールとセル プログラミングのトピックテキスト システムの概要

于 2009-03-03T20:18:30.487 に答える
3
  1. 本当にサブクラス化する必要がある場合は、 をサブクラス化する必要がありますNSTextFieldCell。に関する情報NSCellsオンラインで入手できます

  2. 絶対に必要でない場合は、セルをサブクラス化しないでください。デリゲート メソッドを使用します。

  3. 少なくとも、NSTextFieldの bindingsを使用して色を変更できます。それらを使用してください。

于 2009-03-03T20:21:33.460 に答える
3

マーティン、

「新しいファイル」ダイアログから始めて、左側で「Cocoa」を選択し、次に Objective-C クラスを選択しました。

これにより、コメントなしで次のコードが生成されます。次に、ヘッダーの「@interface」行の NSObject を「NSTextView」に変更するだけで、サブクラスが動作します。XCode 3.0 を使用している場合は、Interface Builder に移動して、NSTextField のクラスを「MyTextView」に変更できます。

また、Aaron Hillegass の著書「Cocoa Programming for Mac OS X, Third Edition」もお読みください。まだ 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 に答える
1

フォーマッタで必要な機能の一部を取得できる場合もあります。

于 2009-03-03T22:58:17.093 に答える