0

我现在第一次开发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

4 回答 4

3

在 loginbtn setaction 之后包括这一行:-

 [loginbtn setTarget:self];
于 2013-10-20T10:17:23.987 回答
0

您似乎正在为从笔尖加载的按钮动态设置操作。

您可能实际上没有将按钮连接到视图控制器中的 IBOutlet,这意味着您正在为 nil 对象设置目标操作。

更好的方法是将按钮操作连接到 Interface Builder 本身中的正确方法。

于 2013-10-20T10:15:17.937 回答
0

我假设 loginbtn 在 Interface Builder 中有它的等价物。如果是这样,只需 ctrl+从按钮拖动到视图控制器以创建 IBACTION。无需在代码中添加操作。

于 2013-10-20T10:17:11.807 回答
0

我不知道它是否与我的情况相同,但是如果您扩展它NSButton并覆盖某些方法,例如(void)mouseDown:(NSEvent *)theEvent;不要忘记调用[super mouseDown:event]

于 2016-08-30T10:50:49.417 回答