1

私はNSTextFieldプレースホルダーを持っています。そして、いくつかの整数プロパティにバインドされています。したがって、バインドされた整数がゼロの場合、フィールドに空のテキストを表示したい (プレースホルダーが表示されます)。

それは可能ですか?

(アップデート)

私はこれができることを発見しましたNSNumberFormatter-それには—(void) setZeroSymbol: (NSString*) string方法があります。これはまだ実際に試していません...

4

3 に答える 3

3

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

于 2013-01-16T16:53:39.233 に答える
0

実行時にバインドする場合は、バインドする前に整数値を確認してください。試す

int i;
if (i == 0)
{
    txt.placeholder = @"text";
}
else
{
    [txt setStringValue:[NSString stringWithFormat:@"%d",i]];
}
于 2013-01-16T08:52:59.517 に答える
0

条件付きバインディングを行うことはできません。

条件に基づいて値を保持し、そのプロパティを使用してテキストフィールドにバインドする別のプロパティを作成する必要があります。

と を使用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];
    }
}
于 2013-01-16T09:33:34.317 に答える