【问题标题】:Cocoa binding: NSTextField with empty string for zero valueCocoa 绑定:NSTextField 为零值的空字符串
【发布时间】:2012-12-30 12:47:19
【问题描述】:

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

有可能吗?

(更新)

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

【问题讨论】:

  • 在 Interface Builder 中绑定。
  • @brigadir 我们如何在 IB 中检查它?不要这样做,而是在加载时检查它,然后根据我的回答为其赋值。
  • 如何在没有额外编码的情况下检查它?我将@property (readwrite, nonatomic) int integerProp 绑定到NSTextField - 所以整数在幕后转换为字符串,我无法控制它。

标签: objective-c cocoa-bindings placeholder nstextfield


【解决方案1】:

您可以使用 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

【讨论】:

    【解决方案2】:

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

    int i;
    if (i == 0)
    {
        txt.placeholder = @"text";
    }
    else
    {
        [txt setStringValue:[NSString stringWithFormat:@"%d",i]];
    }
    

    【讨论】:

      【解决方案3】:

      你不能做条件绑定。

      您需要创建另一个属性来保存基于条件的值并使用该属性并绑定到文本字段。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-06
        相关资源
        最近更新 更多