我有NSTextField
占位符。并且它绑定到某个整数属性。所以我想在绑定整数为零时在字段中显示空文本(显示占位符)。
有可能吗?
(更新)
我发现这可以通过NSNumberFormatter
完成 - 它有—(void) setZeroSymbol: (NSString*) string
方法。在实践中没有尝试过这个......
答案 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。
我正在使用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];
}
}