【问题标题】:Swift subclass of NSPoupupButton, how to get action (IBAction) within the subclassNSPoupupButton的Swift子类,如何在子类内获取动作(IBAction)
【发布时间】:2018-06-10 02:17:13
【问题描述】:

在 Swift 4 中,我继承了 NsPopupButton。我可以在视图中使用该控件并执行通常的 Ctrl-Drag 来创建 IBAction 和所有工作。

我想做的是处理子类本身的动作,并允许视图响应。

我是 Swift/MacOS/Xcode 的新手,但在 Windows 中使用 C# 进行编程,并了解目标/动作的概念和响应程序树的遍历 - 但对我要温柔 :) 这样做的原因是为了拦截用户选择一个项目并将其保存以供以后恢复。

我在子类中尝试将 self.target = self 和 self.action = #Selector 设置为本地函数。这行得通,但是动作/事件停止遍历响应者树,它只是在子类中停止。

那么,我怎样才能让子类响应用户更改选择,然后让其他任何东西也响应该操作?

【问题讨论】:

    标签: swift events ibaction first-responder


    【解决方案1】:

    在 macOS 中有一种称为 Cocoa Bindings 的模式。它可以作为目标/动作的非常方便的替代品。

    Control-从弹出按钮的菜单项拖动到目标视图控制器(或类,如果使用 xib)的 First Responder(读取的立方体)。如果IBAction 被正确创建,它应该会出现在列表中。 action 方法在当前实现了该方法的响应者链的第一个对象中执行。

    【讨论】:

    • 您好,感谢您的回复,我试过了,虽然我在视图中调用了该操作,但在子类中没有调用它。所以,在我的子类中,在 AwakeFromNib 中,我添加了 target=self 和 action=#selector 'local method' - 这有效,但在情节提要中,当我 ctrl 将控件拖动到第一响应者时,选择我在视图控制器中创建的 IBAction,视图控制器永远不会被触发。 - 有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多