2

ユーザーがタグを入力する方法としてNSTokenFieldを使用しています。すべてが正常に機能し、ユーザーがタグを追加または削除するときの両方で、CoreDataがタグを管理するように接続します。

最近、ロジックを追加して、ユーザーがタグを追加するとNSTokenFieldが垂直方向にサイズ変更され、AndrewBowmanのIFVerticallyExpandingTextFieldを使用して次の行にブレークするようにしまし。繰り返しますが、これはすべて正常に機能します。

問題は、最初にNSTokenFieldにタグを入力する必要があるときに、サイズを変更する必要があることです。次のように呼び出して、フィールドにデータを入力します。

[tagField setObjectValue: anArray];

ここで、anArrayは、タグまたはトークンを表す一連のオブジェクトです。これにより、NSTokenFieldデリゲートメソッドが呼び出されます

tokenField:displayStringForRepresentedObject:

これは、前の配列で渡されたオブジェクトの文字列表現を返します。

displayStringForRepresentedObjectをすべて呼び出した後、NSTokenFieldのサイズを変更する必要があります。通知や、それがすべて完了したことを確認する方法について誰かが何か考えを持っていますか?displayStringForRepresentedObjectの各呼び出しの間にサイズ変更を呼び出す方法でさえ、おそらく機能します。

前もって感謝します。

4

1 に答える 1

0

-setNeedsDisplay:および-displayIfNeeded ...、つまり-setNeedsSizeToFit:および-sizeToFitIfNeededに似たものを試すことができます。

必要なのは、「needsSizeToFit」BOOLフラグと-setNeedsSizeToFit:および-sizeToFitIfNeededメソッドだけです。

トークンを設定したら、-setNeedsSizeToFit:YESを呼び出します。次に、インスタンスのneedsSizeToFitフラグを設定し、フラグがYESの場合、[self PerformSelector:@selector(sizeToFitIfNeeded)withObject:nil afterDelay:0]を呼び出します。-sizeToFitIfNeededメソッドは、needsSizeToFitフラグがYESであるかどうかを確認し、[self sizeToFit]を呼び出してから、needsSizeToFitフラグをNOに設定します。

アップデート

上記のように基本的な自動サイズ設定を行う完全なクラス(JLNAutoSizingTokenField)を次に示します。唯一の拡張は、前述のデリゲートメソッドでこれを呼び出すことでした。

- (NSString *)tokenField:(NSTokenField *)aTokenField 
displayStringForRepresentedObject:(id)representedObject
{
    [(JLNAutoSizingTokenField *)aTokenField setNeedsSizeToFit:YES];
    return representedObject;
}
于 2010-09-17T14:27:53.220 に答える