【问题标题】:How to bind CGSize.width in cocoa (Interface Builder)?如何在可可(界面生成器)中绑定 CGSize.width?
【发布时间】:2013-12-13 13:55:21
【问题描述】:

我尝试将 Cocoa 应用程序的 CGSize 属性的宽度值与界面生成器绑定。

我将“模型键路径”设置为“windowSize”(我的 CGSize 值)并在“值转换器字段”中尝试了不同的值,例如“宽度”或“%{width}@”,但是当我运行应用程序时,它崩溃了这个错误“找不到名称为 {width}@ 的值转换器”

我应该使用哪个变压器?

【问题讨论】:

  • width 是结构成员,而不是属性。为了绑定到它,你的类中需要一个符合 KVO 的访问器。
  • “Value Transformer”不采用键、键路径或格式字符串。它采用值转换器的名称(某种 NSValueTransformer 的对象)。如果不存在用于此的值转换器,您可以创建一个 - 但如果这是可编辑的,那么祝您找到将宽度单独转换回大小的方法。
  • @CodaFi:在这种情况下是正确的,但 there are exceptions.

标签: objective-c cocoa binding interface-builder


【解决方案1】:

您需要在您的某些对象中创建自定义访问器——例如,窗口控制器(它必须是 NSWindowController 的自定义子类)——并绑定到这些对象。

在每个访问器中,获取窗口的framecontentSize,然后检索或更改它的相关成员。然后在设置器中,将调整后的框架或尺寸设置回原来的位置;在 getter 中,您返回提取的数字。

直接绑定到 CGSize 值的 widthheight 或矩形的 originsize 的(任何部分)由于 CodaFi 描述的原因不起作用:您可以只绑定到对象的属性,大小和矩形(和点)不是对象。

尽管您对两者使用相同的“点语法”(foo.bar),但访问结构的成员(例如 NSSize 或 CGSize 的 width)和访问一个对象(例如 NSWindow 的contentSize)。您可以绑定到对象的属性;您不能绑定到结构的成员。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 2014-09-15
    相关资源
    最近更新 更多