Objective c 如何从目标C/C中的视图类事件调用控制器类(委托)方法
假设我有一个NSWindow类,它有几个鼠标和触摸板移动事件 例如,此代码 嗯,我认为这应该是一个很好的编程,它类似于将按钮的动作指向控制器中的方法。 在MyWindow.m类中我有(在IB中我将window类设置为它)Objective c 如何从目标C/C中的视图类事件调用控制器类(委托)方法,objective-c,cocoa,Objective C,Cocoa,假设我有一个NSWindow类,它有几个鼠标和触摸板移动事件 例如,此代码 嗯,我认为这应该是一个很好的编程,它类似于将按钮的动作指向控制器中的方法。 在MyWindow.m类中我有(在IB中我将window类设置为它) 在我的AppDelegate.h中 @interface AppDelegate : NSObject <NSApplicationDelegate> { IBOutlet NSTextField *label; } -(void)setLabel; @end
在我的AppDelegate.h中
@interface AppDelegate : NSObject <NSApplicationDelegate>
{
IBOutlet NSTextField *label;
}
-(void)setLabel;
@end
我已经尝试了IB中的委托引用#import@class、[[…alloc]init](我为MyWindow创建了一个对象类,这要感谢我前面问题的答案)
后者似乎是最接近的一个,如果两个类都是委托,它就可以工作,因此我可以从第二个控制器(委托类)的iAction方法中的按钮成功调用“setLabel”操作,
但是此视图事件似乎没有与代理的操作通信,尽管它们的代码正在执行。您正在向AppDelegate类发送消息,而不是从NSApplication singleton([NSApplication sharedApplication]可访问的AppDelegate类的实例) 这是错误的,要让学员这样做:
AppDelegate* appDelegate = (AppDelegate*)[[NSApplication sharedApplication] delegate];
然后将消息发送到该实例:
[appDelegate setLabel];
哇,谢谢你。你们从哪里学的!我无意中阅读了许多书籍/网站/苹果的文档,但没有任何成功,但就这一行代码为我做了一切。Objective-C/Cocoa development有很棒的文档。不仅由苹果公司提供。这里是一个集合:在Cocoa中,您通过全局变量
NSApp
访问应用程序对象,因此获取委托的行可以是[NSApp delegate]
@JoshCaswell nice,不知道捷径。这很好。让我抓狂的是,他们没有在iOS中包含这些。
[AppDelegate setLabel];
AppDelegate* appDelegate = (AppDelegate*)[[NSApplication sharedApplication] delegate];
[appDelegate setLabel];