我现在正在第一次开发mac应用程序。所以这是我的问题。首次启动时,应用程序在主菜单xib文件的自定义视图中显示登录表单,登录表单从另一个NSViewController
文件加载。问题是当我点击主菜单中加载的登录表单上的按钮时,它不响应点击事件。我已尝试使用performselector
方法,添加Action
,也使用IBAction
,但这些方法都无效。
这是appdelegate.m的代码
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
NSViewController *loginformcontroller = [[LoginViewController alloc]initWithNibName:@"LoginViewController" bundle:nil];
[window setContentView:loginformcontroller.view];
}
并在LoginViewController.m
@implementation LoginViewController @synthesize usernametxt,passwordtxt,loginbtn;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Initialization code here.
[loginbtn setAction:@selector(checkalogin)];
}
return self;
}
-(void)checkalogin{
NSLog(@"masuk");
}
有什么建议吗?
答案 0 :(得分:1)
在loginbtn setaction之后包含此行: -
[loginbtn setTarget:self];
答案 1 :(得分:0)
您似乎正在为从笔尖加载的按钮动态设置操作。
您可能实际上没有将按钮连接到视图控制器中的IBOutlet,这意味着您正在为nil对象设置目标操作。
更好的方法是将按钮操作连接到Interface Builder本身的正确方法。
答案 2 :(得分:0)
我假设loginbtn在Interface Builder中具有相同的功能。如果是这样,只需按住Ctrl +从按钮拖动到视图控制器即可创建一个IBACTION。无需在代码中添加操作。
答案 3 :(得分:0)
我不知道它是否与我的情况相同,但如果你扩展NSButton
并覆盖某些方法,例如(void)mouseDown:(NSEvent *)theEvent;
,请不要忘记致电[super mouseDown:event]