我有NSTextField
占位符。它绑定到一些整数属性。因此,当绑定整数为零时,我想在字段中显示空文本(显示占位符)。
有可能做到吗?
(更新)
我发现这可以通过NSNumberFormatter
- 它有—(void) setZeroSymbol: (NSString*) string
方法。在实践中尚未尝试过...
我有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]];
}
你不能做条件绑定。
您需要创建另一个属性,该属性将根据条件保存值并使用该属性并绑定到文本字段。
我正在使用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];
}
}