書式とユーザインタフェース要素
この記事では、Cocoa のセルに書式を関連付ける方法について説明します。この記事は iOS には適用されません。
セルと書式の関連付け
Cocoa では、テキストを表示しながらコンテンツとして任意のオブジェクトを持つユーザーインターフェイスのセルは、入力と出力の両方に書式を使用できます。セルが表示されると、セルは任意のオブジェクトをテキスト表現に変換します。セルがオブジェクトをどのように表示するかは、セルに関連付けられた書式があるかどうかによって異なります。セルに書式がない場合、セルはオブジェクトの 国際化 表現を使用して内容を表示します。セルに書式がある場合、セルは書式からフォーマットされた文字列を取得します。ユーザーがテキストをセルに入力すると、セルはその書式を使用してテキストを基になるオブジェクトに変換します。
書式を使用する最も簡単な方法は、Interface Builder でパレットからテキストフィールドやテーブルビューの列などのコントロールにドラッグすることです。
プログラムで書式オブジェクトを作成してセルに結びつけるには、書式のインスタンスを割り当てて、その書式またはスタイルを必要に応じて設定します。次に、NSCell の setFormatter: メソッドを使用して、書式インスタンスをセルに関連付けます。以下のコード例は、NSNumberFormatter のインスタンスを作成および構成し、setFormatter: メソッドを使用して NSTextField オブジェクトのセルに適用します。
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; [numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; [[textField cell] setFormatter:numberFormatter];
同様に、NSDateFormatter オブジェクトのインスタンスをプログラムで作成して構成できます。以下の例では、日付書式を作成し、それをフォーム (contactsForm) のセルに関連付けます。
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; [dateFormatter setTimeStyle:NSDateFormatterNoStyle]; [[contactsForm cells] makeObjectsPerformSelector:@selector(setFormatter:) withObject:dateFormatter]
書式オブジェクトを持つセルがコピーされると、新しいセルは書式オブジェクトをコピーするのではなく強い参照を作ります。
セルがその値を表示しまたは編集する必要がある場合、セルはそのオブジェクトをフォーマットされた文字列を返す書式に渡します。ユーザーが文字列を入力するか、文字列がプログラムで (setStringValue を使用して) セルに書き込まれると、セルは対応するオブジェクトを書式から取得します。
エラー処理用デリゲートメソッド
NSControl は、NSFormatter の getObjectValue:forString:errorDescription : , isPartialStringValid:proposedSelectedRange:originalString:originalSelectedRange:errorDescription : ,および isPartialStringValid:newEditingString:errorDescription: メソッドの実装で返されたエラーを処理するための デリゲート(Delegate) メソッドを持っています。これらのデリゲートメソッドはそれぞれ、 control:didFailToFormatString:errorDescription: および control:didFailToValidatePartialString:errorDescription: です。
前の章 次の章