Swift 快速目标行动
我来自C#背景,我正试图进入Swift和OSX开发。当我在.NET中实现自定义控件时,我可以创建事件来通知事件处理程序控件中发生的事情 例如:如果我创建了一个允许用户在其上放置文件的控件,我可以在用户放置文件时触发事件,并且事件处理程序可以直接处理放置的文件 现在,我想实现一个Swift 快速目标行动,swift,macos,interface-builder,Swift,Macos,Interface Builder,我来自C#背景,我正试图进入Swift和OSX开发。当我在.NET中实现自定义控件时,我可以创建事件来通知事件处理程序控件中发生的事情 例如:如果我创建了一个允许用户在其上放置文件的控件,我可以在用户放置文件时触发事件,并且事件处理程序可以直接处理放置的文件 现在,我想实现一个NSControl派生视图NSControl已经实现了目标操作模式,并提供了action操作,我可以在Interface Builder中将其连接到某个方法来处理该操作。右键单击控件时,操作操作也可用: 现在,我想做的是
NSControl
派生视图NSControl
已经实现了目标操作模式,并提供了action
操作,我可以在Interface Builder中将其连接到某个方法来处理该操作。右键单击控件时,操作
操作也可用:
现在,我想做的是定义另一个操作(可能是以后的另一个),它可以使用IB以相同的方式连接。我查找了NSControl
的定义,它显示了以下两行:
weak public var target: AnyObject?
public var action: Selector
但是,向我的子类添加类似的代码不会影响IB中的任何内容(为类设置了@ibdesiable
属性)
然后,我定义了一个可以由某个代表实现的协议:
public protocol SomeDelegate {
func someDelegateMethod(path: String)
}
@IBDesignable
public final class GreatControl: NSControl {
public var delegate: SomeDelegate?
我可以用如下代码设置委托:
@IBOutlet weak var myGreatControl: GreatControl!
override func viewDidLoad() {
super.viewDidLoad()
self.myGreatControl!.delegate = self
}
但是我真的希望使用IB而不是代码来设置委托
问题是:我更喜欢目标操作模式,因为它非常接近.NET或其他事件驱动环境的功能。如何实现这一点,以便使用IB连接操作?如果这是不可能的,我是否可以通过某种方式使委托至少可以通过IB而不是仅通过代码设置
PS:当我在谷歌上搜索这个时,几乎没有关于OSX的任何信息。这里似乎只有IOS开发者。我希望答案不要详细说明如何为IOS做事情(除非它们对OSX也一样),因为我没有开发IOS应用程序。有
@IBInspectable
装饰器,但它只适用于ints、颜色等属性。不确定IB是否支持自定义对象/操作的操作映射。@Cristik我实际上已经尝试过了,但它没有做任何事情。在重新表述了这个问题之后,我在这里找到了答案,所以我在谈论对IOS视图做同样的事情(实际上我现在无法链接它,我正在工作,手头没有链接)。答案是,您可以实现其他目标和操作,但必须用代码将它们连接起来。那真是太遗憾了。。。