繁体   English   中英

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

[英]Cocoa binding: NSTextField with empty string for zero value

我有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]];
}

你不能做条件绑定。

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

我正在使用bindedStringbindedInteger 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];
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM