2009-11-10 36 views
1

我創建了一個填充了自定義UITableViewCell(like this)的表格視圖。每個單元格都包含兩個UIButton。我將動作分配給按鈕,如下所示:iPhone桌面視圖 - 一些按鈕/操作問題

[decreaseButton addTarget:self action:@selector(decrease) forControlEvents:UIControlEventTouchUpInside]; 

這是正確的方法嗎? 無論如何,它的工作原理,但在我的「減少」方法中,我需要知道我的18個表視圖行中的哪個按鈕被按下。當然,indexPath.row在cellForRowAtIndexPath方法之外不起作用。 有人可以解釋我如何做到這一點?

非常感謝!

iyassin

回答

3

您可以通過兩種方式來做到這一點。

檢查事件發送

從更改減少方法:

- (void)decrease; 

到:

- (void)decrease:(id)sender; 

時減少被稱爲這樣,你會得到一個參考到觸摸了裏面事件的按鈕。

定義的降低的方法更接近信息

另一種解決方案將是使爲每個按鈕不同的目標實例(例如,實現減少功能作爲自定義單元格的一部分)。這樣你就知道被觸摸的按鈕是當前單元的按鈕。

+0

什麼樣的參考/哪種數據類型是該參考?我只是試圖用NSLog將它打印到控制檯,但是這使得我的應用程序在點擊按鈕後立即關閉。 一般來說,我的問題如下:我如何在我的方法中使用它? ;-) – iYassin 2009-11-10 19:29:25

+1

'sender'參數是有事件的按鈕的實例。所以你必須以某種方式查找哪個單元具有該按鈕。有點煩人,需要額外的狀態信息。我會將減小功能移動到Cell類。這樣你就不必確定任何東西,你就已經在正確的位置,並知道按下了哪個按鈕。 – 2009-11-10 19:36:08

+0

「將減少功能移動到單元類」是什麼意思? – iYassin 2009-11-11 10:00:22

1

我解決這個問題的方法是跟蹤我可能需要在自定義單元格對象中的數據。並且按鈕不是連接到外部接收器,而是連接到自己的單元,反過來知道如何調用動作的真實接收器。

我把我的手機的東西,如:

cell = [[MyTableViewCell alloc] initWithStyle:style 
           reuseIdentifier:CellIdentifier]; 

而且我有一個設置方法,所以我可以重新初始化一個細胞,當我出列,它:

[cell setupMyCellWithContext:objectID 
         target:[[UIApplication sharedApplication] delegate] 
         action:@selector(someAction)]; 

所以你的類中您使用在設置方法中發送的動作和目標來調用真實目標:

- (void)doAction:(id)sender { 
    if ([target respondsToSelector:action]) { 
     [target performSelector:action withObject:objectID afterDelay:0]; 
    } 
} 

因此,當您的用戶點擊按鈕,os會調用[cell doAction:],它會在您使用正確的上下文對象之前調用您設置的目標和動作選擇器。