2011-02-23 49 views
3

基本上我需要在視圖中有幾個按鈕。我希望他們都能調用一個函數,以便我可以跟蹤「狀態」。多個UIButtons 1函數

如何判斷哪個按鈕被稱爲函數?無論如何要得到發件人的文本?

回答

5

在iOS的動作方法,包括IBAction爲方法,可以具有以下任一簽名(見 「Target-Action in UIKit」):

- (void)action 
- (void)action:(id)sender 
- (void)action:(id)sender forEvent:(UIEvent *)event 

如果您使用接受發件人的方法簽名,則您可以訪問觸發該操作的對象。然後您可以訪問調用對象的屬性,包括其標題和標籤。您還可以將發件人與您可能已經擁有的指針進行比較,以確定哪個按鈕是此特定事件的發件人。

我喜歡比較指針,因爲我相信if (sender == self.nextPageButton)if (sender.tag == 4)if ([((UIButton *)sender).currentTitle isEqualToString:@"foo"])更容易理解並且不太可能中斷。在IB中查看標籤不會告訴您代碼假定它們是什麼意思,以及它們是否重要。標題會隨着您更新UI或本地化您的應用程序而發生變化,而且這些更改也不需要更改代碼。

+0

+1的答案比接受的答案要詳盡得多。 – 2011-02-24 13:13:51

3

設置按鈕的tag屬性。

您可以在界面生成器中執行此操作(只需查看字段)。

然後,在代碼:

if (sender.tag == 0) { 
} else if (sender.tag == 1) 

+0

啊。很好的一個伴侶。謝謝! – Critter 2011-02-23 22:54:51

1

您無需明確設置標籤。您可以在.h文件中和他們的財產定義的UIButton的IBOutlets以及

@property (nonatomic , retain) IBOutlet UIButton *myButton; 

-(IBAction) browse : (id) sender; 
在.m文件

可以實現方法

方法
-(IBAction) browse : (id) sender{ 

    if((UIButton *)sender == myButton){/*add the action here*/} 
} 

在方法中添加更多if語句以獲得更多按鈕。請連接所有各個按鈕的IBOutlet,並連接選擇器瀏覽。

請記住在dealloc方法中釋放IBOutlets以防止任何內存泄漏。

希望這有助於!