在 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是一个字典,你可以在其中存储你想要的任何东西。
我 运行 遇到一个问题,我需要在作为 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是一个字典,你可以在其中存储你想要的任何东西。