2012-11-26 45 views
3

我似乎無法在自定義的UITableViewCell中正確處理按鈕點擊。這是一個包含標籤和按鈕的單元格。我有以下代碼:在UITableViewCell裏面點擊按鈕

var cell = tableView.DequeueReusableCell (cellKey) as ApptHistoryCell; 
if (cell == null) 
{ 
    cell = _container.Cell; 
    cell.SelectionStyle = UITableViewCellSelectionStyle.None; 
} 

if (InfoClicked != null) 
{ 
    cell.ActionButton.TouchUpInside += InfoClicked; 
} 

InfoClicked是在單元創建循環中傳遞的事件處理程序。當單元格被重用時,這會導致空引用異常,因爲(我認爲)TouchUpInside正在嘗試調用2個處理程序。舊的和新的,導致崩潰。如果我把事件處理程序放在cell == null中,那麼會顯示錯誤的動作。

如何正確處理點擊?

謝謝!

回答

5

予處理定製單元內的按鈕的方式:我定義一個IBAction爲

  • 我連接到定製的細胞
  • 我定義委託和用於小區來處理委託方法內一個UIButton事件按鈕動作
  • IBAction調用委託方法
  • 當在cellAtRow中定義單元格時...我將tableViewController設置爲委託。 cell.delegate =自我;
  • 我的任何行動,我想該委託方法裏面做的tableViewController

有道理?

+0

輝煌,謝謝!像魅力一樣工作 –

+1

有沒有辦法通過這種委託方法獲得該單元格的indexPath? – Isuru

+0

這是一個很好的問題Isuru,值得單獨發佈。這就是我現在正在扼殺我。 – rtcarlson

0

你應該從一個xib文件創建你的單元格,它已經將按鈕連接到所有者的目標(視圖控制器)。

+0

這就是我正在做的。現在我想處理單元格上的點擊操作 –

-3

在您的自定義單元中,只需在IB處找到您的按鈕並與該屬性建立連接即可。現在

,在cellForRowAtIndexPath控制器,你需要什麼,只是標記該按鈕,說:現在

(MyCustomCell*)cell.myButton = indexPath.row; 

,之後剛剛設置的單擊事件這樣的: -

[(MyCustomCell*)cell.myButton addTarget:self action:@selector(NeedFunctionToCall:) forControlEvents:UIControlEventTouchUpInside]; 

現在,在相同的視圖控制器,實現所需的方法,如下所示:

-(void)NeedFunctionToCall:(id)sender 
{ 
NSLog("Got the event :-> %d, from the cell/button",[sender tag]); 
} 
相關問題