【问题标题】:Communicating between subclassed nstextfield and view controller in swift快速在子类 nstextfield 和视图控制器之间进行通信
【发布时间】:2015-09-15 17:44:08
【问题描述】:

我遇到了一个问题,我需要在作为 nstextfield 子类的类和我在 cocoa swift 项目中使用的视图控制器之间进行通信。

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

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

提前感谢您的帮助。

【问题讨论】:

  • 您发送自己的通知还是使用 NSViewFrameDidChangeNotification?
  • 嗨 Willeke,我正在发送我自己的通知,如下NSNotificationCenter.defaultCenter().postNotificationName("adviseViewControllerTextboxChanged", object: nil),它本质上触发了一个函数来处理表中特定行的重新调整大小。然后我的问题就变成了我需要在该函数中知道该特定行中 nstextfield 上框架的大小。

标签: cocoa size subclass viewcontroller nstextfield


【解决方案1】:

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

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

【讨论】:

  • 这解决了我的问题。正是我试图解决的问题。谢谢威勒克!
【解决方案2】:

您应该使用自定义方法扩展您的子类文本字段类上方的NSTextFieldDelegate-protocol,例如

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

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

然后只需通过视图控制器实现此协议,并在文本字段 init 上设置 customDelegate-property。

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

【讨论】:

    猜你喜欢
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多