objective-c - 在自定义 NSView 放置事件的每个实例的基础上执行某些操作

标签 objective-c macos cocoa

所以我的应用程序委托(delegate)中有两个自定义 NSView 实例

@property (assign) IBOutlet SYDropView *sourceView;
@property (assign) IBOutlet SYDropView *destView;

SYDropView 有一个 currPath ivar,当将文件夹拖放到其上时,它会更新,效果很好。

现在,如果我想做一些额外的事情,比如更新标签,根据哪个 SYDropView 被更改,我如何区分实例来检查 sourceView 或 destView 是否被更改?我需要知道哪一个被更改,以便我可以更新正确的标签。我是否会将发件人传递给应用程序委托(delegate)并对其执行某些操作?

最佳答案

我建议编写一个协议(protocol),为您的SYDropView定义委托(delegate),使用如下方法:

@protocol SYDropViewDelegate

- (void) folderDroppedOnView: (SYDropView*) view;

@end

当文件夹被删除时,您应该从 SYDropView 调用此方法,以便您可以识别哪个 View 注意到了该事件。

要轻松设置 View 的委托(delegate),您只需覆盖 setter 即可:

- (void) setSourceView: (SYDropView*) sourceView {
    _sourceView= sourceView;
    _sourceView.delegate= self;
}

对于setDestView也是如此。

关于objective-c - 在自定义 NSView 放置事件的每个实例的基础上执行某些操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20733347/

相关文章:

C - 父进程无限期地等待运行 authopen 的 fork 子进程

macos - macOS 上的 USB 外设仲裁

iphone - 将 RSA key 导入 iPhone 钥匙串(keychain)?

objective-c - 在 UIWebView 中播放 YouTube 视频时强制使用纵向模式

ios - 使用页面控件为我的 iOS 应用创建教程

iphone - 在 Objective-C 中创建 View 委托(delegate)的语法

macos - Android Studio 模拟器在 Mac OS X 上非常慢

ios - 核心数据-后台线程中的更新实体会自动更改主线程中的 NSManagedObject 而无需合并-为什么?

cocoa - 如何创建类似 iPhoto 的界面

objective-c - 为什么 cocoa 不在所有地方都使用相同的枚举声明样式?