【问题标题】:implementing Target - Action pattern in custom view在自定义视图中实现 Target - Action 模式
【发布时间】:2014-01-16 08:01:10
【问题描述】:

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

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

【问题讨论】:

    标签: objective-c macos cocoa target-action


    【解决方案1】:

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

    @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 时运行。

    【讨论】:

    • 我添加了代码,但仍在界面构建器中,当我右键单击自定义视图时,我看不到带有选择器以连接窗口控制器的“已发送操作”部分,例如在 NSButton 中有。
    • @amramaz 您必须以编程方式进行设置,也许在自定义视图的 awakeFromNib 方法中。
    • 有没有办法使用 IB 来做到这一点?我希望它的行为就像内置的可可视图一样。
    • @amramaz 我不这么认为,不。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    相关资源
    最近更新 更多