在自定义视图中实现目标 - 操作模式

时间:2014-01-16 08:01:11

标签: objective-c macos cocoa target-action

我创建了一个继承自NSView的自定义视图。 我的目标是当用户单击自定义视图时,通知我的NSWindowControl,该窗口与包含自定义视图的窗口相关联。

我想使用Action-Target模式实现这一点,就像NSButton一样。 这样我就可以使用Interface Builder将自定义视图与窗口控制器中的操作连接起来。

1 个答案:

答案 0 :(得分:0)

将以下内容添加到自定义视图头文件中:

@interface MyCustomView : NSView

@property (weak, nonatomic) id userClickedTarget;
@property (assign, nonatomic) SEL userClickedAction;

@end

在自定义视图实现文件中合成getter / setter(对于最新版本的Xcode / clang,这实际上是可选的):

@synthesize userClickedTarget = _userClickedTarget;
@synthesize userClickedAction = _userClickedAction;

并在您的代码中调用目标/操作:

if (_userClickedTarget && _userClickedAction) {
    [_userClickedTarget performSelector:_userClickedAction
                             withObject:self
                             afterDelay:0.0];
}

请注意,使用performSelector:withObject:afterDelay 解析来自您的视图代码的调用,并使其在下次处理runloop时运行。