2009-09-07 49 views
1

我應該如何採取NSButton文本值,例如,如果我用2個按鈕與文本點擊和取消,我想檢查哪個按鈕被點擊,然後顯示與NSRunAlertPanel(...)的消息我點擊了哪個按鈕...什麼我應該在點擊按鈕時爲它寫代碼。如何獲取NSButton的文本值?

回答

1

在你的操作方法中,你會得到一個參數,通常命名爲'sender',它就是按鈕。所以,你可以這樣做:

- (IBAction)buttonClicked:(id)sender 
{ 
    if ([[sender title] isEqualToString:@"Click"]) { 
     NSLog(@"Click clicked."); 
    } else if ([[sender title] isEqualToString:@"Cancel"]) { 
     NSLog(@"Cancel clicked."); 
    } 
} 

這是最好不要使用標題檢查按鈕,因爲標題可以以不同的本地化修改。您可以指定tag,它只是一個int值,可用於識別不同的發件人。

+0

感謝,它幫助我。我會盡量用標籤檢查它。 – maddy 2009-09-09 08:11:21

1

這是典型的實現方式是每個按鈕都會調用不同的動作,因此不需要檢查按鈕的文本。見The Target-Action Mechanism

通常,使用用戶可見文本來控制程序邏輯幾乎總是一個壞主意,因爲這會使本地化變得更加困難。

您可能還想進一步描述您的情況。你使用Interface Builder來創建你的界面嗎?這些按鈕是模態對話框還是文檔窗口?

+0

好的,我明白你的觀點。我只是試圖嘗試,如果我能做到這一點,模式對話框,是的,我使用的界面生成器。 感謝您的指針.. :) – maddy 2009-09-09 08:16:37

1

您可以在Interface Builder的檢查器窗口的類信息選項卡中爲按鈕指定一個名稱,然後在您的應用程序委託中將其聲明爲IBOutlet。

AppDelegate.h:

IBOutlet NSButton *ClickButton; 
IBOutlet NSButton *CancelButton; 

然後掛接在界面生成器插座,只需要檢查哪個按鈕是在你的方法發件人:

- (IBAction)buttonClicked:(id)sender 
{ 
    if (sender == ClickButton) { 
     NSLog(@"Click clicked."); 
    } 
    else { 
     NSLog(@"Cancel clicked."); 
    } 
}