在 swift 中的子类 nstextfield 和视图控制器之间进行通信

Communicating between subclassed nstextfield and view controller in swift

我 运行 遇到一个问题,我需要在作为 nstextfield 的子 class 的 class 和我在 cocoa swift 项目。

subclassed nstextfield 更改其框架的大小。该字段本身位于视图控制器内的 table 内。本质上,当 nstextfield 更改其框架大小时,我希望视图控制器能够意识到这一点。我可以通过使用 Nsnotification Center 向视图控制器发出框架已更改的信号,其中视图控制器中的观察者侦听通知,效果很好。但是现在当该通知被触发时,我需要查看控制器 return 到 subclassed nstextfield 以检索框架的大小。我不相信我可以通过通知消息传递例如帧大小。

谁能告诉我如何从视图控制器中检索 nstextfield 的帧大小?

提前感谢您的帮助。

您应该使用 NSTextFieldDelegate-protocol 扩展 classed 文本字段 class 上方的自定义方法

protocol MyCustomTextFieldDelegate: NSTextFieldDelegate
{
  func OnTextFieldSizeDidChange(sender:MyCustomTextField, newFrame:CGFrame)
}

class MyCustomTextField : NSTextField
{
//...
weak var customDelegate: MyCustomTextFieldDelegate?
}

然后只需通过视图控制器实现此协议并在文本字段初始化时设置 customDelegate-属性。

当您的文本字段确实改变了框架时,应该调用上面的方法。

当您 post 通知时,您可以指定一个对象,在本例中为文本字段。 viewcontroller 可以从 notification.object 检索文本字段并请求其框架。

如果viewcontroller需要更多的信息,你可以使用-postNotificationName:object:userInfo:,userinfo是一个字典,你可以在其中存储你想要的任何东西。