NSButton没有回应

时间:2013-10-20 10:05:32

标签: objective-c macos cocoa

我现在正在第一次开发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");
}

有什么建议吗?

4 个答案:

答案 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]