1

我有NSTextField占位符。它绑定到一些整数属性。因此,当绑定整数为零时,我想在字段中显示空文本(显示占位符)。

有可能做到吗?

(更新)

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

4

3 回答 3

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

于 2013-01-16T16:53:39.233 回答
0

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

int i;
if (i == 0)
{
    txt.placeholder = @"text";
}
else
{
    [txt setStringValue:[NSString stringWithFormat:@"%d",i]];
}
于 2013-01-16T08:52:59.517 回答
0

你不能做条件绑定。

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

我正在使用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];
    }
}
于 2013-01-16T09:33:34.317 回答