我遇到了一个问题,我需要在作为nstextfield的子类的类和我在cocoa swift项目中使用的视图控制器之间进行通信。
子类的nstextfield改变了它的帧的大小。字段本身位于视图控制器中的表中。实质上,当nstextfield更改其帧大小时,我希望视图控制器能够意识到这一点。我能够通过使用Nsnotification Center向视图控制器发信号通知帧已更改,其中视图控制器中的观察者监听通知,该工作正常。但是现在当触发该通知时,我需要查看控制器以返回子类的nstextfield以便检索帧的大小。我不相信我可以通过通知消息传递一个帧大小。
有人能告诉我如何从视图控制器中检索nstextfield的帧大小吗?
感谢您的帮助。
答案 0 :(得分:0)
您应该使用自定义方法(例如
)扩展您的子类文本字段类之上的NSTextFieldDelegate
- protocol
protocol MyCustomTextFieldDelegate: NSTextFieldDelegate
{
func OnTextFieldSizeDidChange(sender:MyCustomTextField, newFrame:CGFrame)
}
class MyCustomTextField : NSTextField
{
//...
weak var customDelegate: MyCustomTextFieldDelegate?
}
然后只需通过视图控制器实现此协议,并在文本字段init上设置customDelegate
- 属性。
当您的文本字段确实更改了框架时,应调用上面的方法。
答案 1 :(得分:0)
发布通知时,您可以指定一个对象,在本例中为文本字段。 viewcontroller可以从notification.object中检索文本字段并询问其框架。
如果viewcontroller需要更多信息,你可以使用-postNotificationName:object:userInfo:,userinfo是一个字典,你可以在其中存储你想要的任何内容。