Cocoa绑定:NSTextField,空字符串为零值

时间:2013-01-16 08:49:43

标签: objective-c cocoa-bindings placeholder nstextfield

我有NSTextField占位符。并且它绑定到某个整数属性。所以我想在绑定整数为零时在字段中显示空文本(显示占位符)。

有可能吗?

(更新)

我发现这可以通过NSNumberFormatter完成 - 它有—(void) setZeroSymbol: (NSString*) string方法。在实践中没有尝试过这个......

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果在运行时绑定,则检查绑定前的整数值。尝试

int i;
if (i == 0)
{
    txt.placeholder = @"text";
}
else
{
    [txt setStringValue:[NSString stringWithFormat:@"%d",i]];
}

答案 2 :(得分:0)

你不能做条件绑定。

您需要创建另一个属性,该属性将根据条件保存该值并使用该属性并绑定到textfield。

我正在使用bindedStringbindedIntegerbindedString绑定到文本字段。

每当执行某些操作时,都会更新。

- (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];
    }
}