[英]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。
我正在使用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];
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.