如何将-mouseUp:事件与NSArrayController的-add:方法关联起来?-mouseUp:事件位于另一个对象中,但它是#import的,并在保存所控制的数组的对象中实例化。
通常,对于NSButton,您可以通过命令从按钮拖动到NSArrayController的-add:方法,但很明显,对于鼠标事件,这是不可能的。
--添加内容--
MATT:谢谢你的回答,在第一次阅读时,它是有意义的。作为一个具有过程性和非图形用户界面语言(嵌入式控制器的PLM51和C51 )背景的Obj-C/Cocoa的初学者,我很难掌握IBOutlets和连接的实际实现。我对按钮之类的东西没有问题(例如,IB中的可视内容),但我的理解是:我需要在myDocuments.h文件中声明-IBOutlet NSArrayControler * arryCtrl;。现在请记住,我在其中覆盖-mouseUp方法的对象称为Canvas,并且在myDocuments.h中我有一个Canvas * canvas声明,因此我有一个在运行时由myDocument实例化的canvas对象。在IB中,我从文件的所有者(myDocument right)拖动到ArrayController,并且建立了一个链接,但没有链接到-add:,因为该选项不可用。在nib (myDocument)中没有Canvas的对象,但是在mouseUp ( canvas方法)中,如果我向IBOutput发送一条消息,即[arrayCtrl add:self] arrayCtrl未知。
无论如何,我相信你们都在咯咯地笑,因为答案可能是如此明显。然而,我真的在努力理解它,并意识到问题出在我的新手编码上。感谢你为这位新手指明了正确的方向
发布于 2008-12-10 05:37:33
这里的典型模式是让你的控制器成为你的画布对象的委托。当您创建画布时,您还将向其发送一条setDelegate:self消息。
然后,您可以使用以下消息定义您的委托协议:
@protocol MyCanvasProtocol
@optional
-(void)canvas:(Canvas *)canvas mouseUp:(NSEvent *)event;
-(void)canvas:(Canvas *)canvas objectSelected:(id)theObject;
@end然后,在画布的-mouseUp:方法中,您只需向画布的委托发送适当的消息。
- (void)mouseUp:(NSEvent *)event {
// some mouse up code
if ([delegate respondsToSelector:@selector(canvas:mouseUp:)])
[delegate canvas:self mouseUp:event];
}以这种方式构建代码允许您轻松地在其他地方重用该画布对象,并且不会将其绑定到您的控制器的实现中。然后,您的控制器可以自由地在画布上以所需的任何方式创建所需的任何对象。
发布于 2008-12-09 06:31:38
在要覆盖其mouseUp:方法的类中,需要有某种方法来引用NSArrayController。这通常是通过IBOutlets完成的。因此,在类中创建一个插座,并将其连接到IB中的数组控制器。这样,您就可以简单地在mouseUp:方法中做任何您想做的事情:
- (void)mouseUp:(NSEvent *)theEvent
{
[arrayControllerOutlet add:self];
}https://stackoverflow.com/questions/351932
复制相似问题