2013-10-20 61 views
0

我現在第一次開發mac應用程序。所以這是我的問題。在第一次啓動時,應用程序在主菜單xib文件的自定義視圖中顯示登錄表單,登錄表單從另一個NSViewController文件加載。問題是當我在主菜單中加載的登錄表單中點擊按鈕時,它不會響應點擊事件。我試過用performselector方法,加Action,也用IBAction,都沒有工作。NSButton沒有迴應

這裏的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

您似乎在爲從筆尖加載的按鈕動態設置動作。

您可能沒有真正將按鈕連接到視圖控制器中的IBOutlet,這意味着您正在爲無對象設置目標操作。

更好的方法是將按鈕動作連接到Interface Builder本身的正確方法。

0

我認爲loginbtn在Interface Builder中有它的等價物。如果是這樣,justctrl +從按鈕拖動到視圖控制器來創建一個IBACTION。無需在代碼中添加操作。

+0

仍然無法正常工作。當我點擊它時沒有按鈕響應。 – Ben

0

包括loginbtn的setAction後,這條線: -

[loginbtn setTarget:self]; 
+0

您正在按鈕上設置動作,但是您還需要設置目標。 –

+0

如果你沒有設置目標(它是* nil *),那麼這個消息被髮送到響應者鏈,有時這可能很有用。 – nielsbot

0

我不知道這是否是相同的情況下,我的,但如果你擴展該NSButton和重寫一些像(void)mouseDown:(NSEvent *)theEvent;的方法不忘記撥打[super mouseDown:event]