私はNSTextFieldプレースホルダーを持っています。そして、いくつかの整数プロパティにバインドされています。したがって、バインドされた整数がゼロの場合、フィールドに空のテキストを表示したい (プレースホルダーが表示されます)。
それは可能ですか?
(アップデート)
私はこれができることを発見しましたNSNumberFormatter-それには—(void) setZeroSymbol: (NSString*) string方法があります。これはまだ実際に試していません...
私はNSTextFieldプレースホルダーを持っています。そして、いくつかの整数プロパティにバインドされています。したがって、バインドされた整数がゼロの場合、フィールドに空のテキストを表示したい (プレースホルダーが表示されます)。
それは可能ですか?
(アップデート)
私はこれができることを発見しましたNSNumberFormatter-それには—(void) setZeroSymbol: (NSString*) string方法があります。これはまだ実際に試していません...
NSValueTransformer を使用できます。
(念のため) NSValueTransformer から新しいクラス、サブクラスを作成します。実装では、次のようなものを追加します。
+(Class)transformedValueClass {
return [NSString class];
}
-(id)transformedValue:(id)value {
if (value == nil) {
return nil;
} else {
if ([value integerValue] == 0) {
return @"";
} else {
return [NSString stringWithFormat:@"%d", [value stringValue]];
}
}
}
Interface Builder でフィールドを選択し、バインディング タブに移動し、Value Transformer ドロップダウンで、作成したクラス名を選択または入力します。これにより、他の場所で変更することを心配する必要がなくなります。プレースホルダーを表示することについて 100% 肯定的ではありません (現在、利用可能な Mac を持っていません)。
編集:これが実際に機能することを確認できます。これは、使用方法を示すために作成した github プロジェクトへのリンクです: https://github.com/macandyp/ZeroTransformer
実行時にバインドする場合は、バインドする前に整数値を確認してください。試す
int i;
if (i == 0)
{
txt.placeholder = @"text";
}
else
{
[txt setStringValue:[NSString stringWithFormat:@"%d",i]];
}
条件付きバインディングを行うことはできません。
条件に基づいて値を保持し、そのプロパティを使用してテキストフィールドにバインドする別のプロパティを作成する必要があります。
と を使用bindedStringしてbindedIntegerいます。bindedStringテキストフィールドにバインドされています。
アクションが実行されるたびに更新されます。
- (id)init{
self = [super init];
if (self) {
self.bindedString=@"place holder string";
}
return self;
}
- (IBAction)button:(id)sender {
if (self.bindedInteger==0) {
self.bindedString=@"place holder string";
}
else{
self.bindedString=[NSString stringWithFormat:@"%ld",self.bindedInteger];
}
}