2010-05-22 82 views
28

說例如我有一個IBAction,它被連接到界面生成器中的UIButton從代碼中調用IBAction的最佳方式是什麼?

- (IBAction)functionToBeCalled:(id)sender 
{ 
    // do something here 

} 

:在我的代碼,例如說在另一種方法,什麼是調用IBAction爲的最佳方式?

如果我嘗試調用它,我收到一個錯誤:

[self functionToBeCalled:]; 

但是,如果我嘗試這樣稱呼它(作弊了一下,我認爲),它工作正常:

[self functionToBeCalled:0]; 

什麼是正確調用它的正確方法?

回答

66

正確的方法可以是:

- [self functionToBeCalled:nil] 

要傳遞一個零發件人,這表明它不是通過通常的框架調用。

OR

- [self functionToBeCalled:self] 

要通過自己作爲發件人,這也是正確的。

選擇哪一個取決於函數的功能,以及它期望發送者是什麼。

+0

完美,謝謝! – iwasrobbed 2010-05-22 19:12:44

+0

如何通過編程方式傳遞[sender標籤]呢? – Andy 2012-06-08 09:05:31

+1

@Andy,你可以將任何NSView子類傳遞給這些方法。實際上,你可以傳遞任何NSObject! (id)是一個可以容納任何參數的泛型類型。只要確保發送IBAction希望收到的東西(通常是NSView的子類) – 2012-06-18 20:06:16

6

IMO調用IBAction應該僅由UI操作(例如按鈕水龍頭)觸發。如果您需要運行多個地方一些代碼,那麼你就可以從中提取IBAction爲代碼到一個新的方法,並調用該方法,從兩個地方

- (IBAction)onButtonTap:(id)sender 
{ 
    [self doSomething]; 
} 

這允許您根據發件人做一些額外的邏輯(也許您可以將相同的動作分配給多個按鈕,並根據sender參數決定要執行的操作)。並且還可以減少IBAction中需要寫入的代碼量(這可以使您的控制器實現保持清潔)。

相關問題