gpt4 book ai didi

cocoa - MouseUp 和 NSArrayController

转载 作者:行者123 更新时间:2023-12-03 16:56:29 25 4
gpt4 key购买 nike

如何将 -mouseUp: 事件与 NSArrayController 的 -add: 方法关联起来? -mouseUp: 事件位于不同的对象中,但在保存受控数组的对象中进行 #import 编辑和实例化。

通常,对于 NSButton,您可以通过命令从按钮拖动到 NSArrayController 的 -add: 方法,但显然这对于​​鼠标事件是不可能的。

-- 新增内容 --
马特:感谢您的回答,第一次读到它是有道理的。作为具有过程和非 GUI 语言(用于嵌入式 Controller 的 PLM51 和 C51)背景的 Obj-C/Cocoa 初学者,我很难掌握 IBOutlets 和连接的实际实现。我对按钮之类的东西(即IB中可见的东西)没有任何问题,但这是我的理解:我需要在 myDocuments.h 文件中声明 -IBOutlet NSArrayControler * arryCtrl; 。现在请记住,我重写 -mouseUp 方法的对象称为 Canvas,在 myDocuments.h 中我有一个 Canvas * canvas 声明,因此,我有一个 Canvas 对象由 myDocument 在运行时实例化。在 IB 中,我从文件所有者(myDocument 右侧)拖动到 ArrayController,并建立了一个链接,但不是 -add:,因为该选项不可用。在 Nib (myDocument)中没有 Canvas 对象但是,在 mouseUp ( Canvas 方法)中,如果我向 IBOutput 发送消息,即 [arrayCtrl add:self] arrayCtrl 是未知的。

不管怎样,我相信你们一定会咯咯地笑,因为答案可能是显而易见的。然而,我真的很想理解这一切,并意识到问题出在我的新手编码上。感谢您为这个新手指明了正确的方向

最佳答案

这里的典型模式是让 Controller 成为 Canvas 对象的委托(delegate)。当您创建 Canvas 时,您还可以向其发送一条 setDelegate:self 消息。

然后,您可以使用一些消息定义委托(delegate)协议(protocol):

@protocol MyCanvasProtocol
@optional
-(void)canvas:(Canvas *)canvas mouseUp:(NSEvent *)event;
-(void)canvas:(Canvas *)canvas objectSelected:(id)theObject;
@end

然后在 Canvas 的 -mouseUp: 方法中,您只需将适当的消息发送到 Canvas 的委托(delegate)即可。

- (void)mouseUp:(NSEvent *)event {
// some mouse up code

if ([delegate respondsToSelector:@selector(canvas:mouseUp:)])
[delegate canvas:self mouseUp:event];
}

以这种方式构建代码可以让您轻松地在其他地方重用该 Canvas 对象,并且不会将其与 Controller 的实现联系起来。然后,您的 Controller 可以自由地以任何需要的方式在 Canvas 上创建它需要的任何对象。

关于cocoa - MouseUp 和 NSArrayController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/351932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com