2012-02-14 59 views
4

在tableView單元中有一個按鈕,我需要響應觸摸事件。的cellForRowAtIndexPath:通常情況下,這將很容易被按鈕在UITableViewCell裏面是一個視圖的子視圖時不能在UITableViewCell子類中工作

[cell.playButton addTarget:self action:@selector(playButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

-tableView內解決

我遇到的問題是,我的按鈕是一個自定義的UITableViewCell子類的裏面,也是一個視圖的子視圖是我創建類的內部..

例如:

UIView *view = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; 
    self.theView = view; 
    [self addSubview:view]; 
    [view release]; 


    UIButton *playButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    playButton.frame = CGRectMake(5, 5, 100, 30); 
    [playButton setImage:[UIImage imageNamed:@"button_playvid.png"] forState:UIControlStateNormal]; 
    [playButton setImage:[UIImage imageNamed:@"button_playvid_active.png"] forState:UIControlStateHighlighted]; 
    self.playButton = playButton; 
    [self.theView addSubview:playButton]; 

當按鈕是第I內創建視圖的子視圖e定製UITableViewCell,那麼單元格會突出顯示,而不是按下按鈕,因此我在-tableView:cellForRowAtIndexPath中設置的目標從不會被調用。不知道爲什麼..任何幫助?

感謝,

喬爾

PS。我意識到,創建一個完全像這樣的背景視圖可能沒有實際的理由,因爲已經有一個。這只是我用來解釋我遇到的問題的示例代碼..:D

感謝您的期待!

+0

用「playButtonPressed:」方法實現編輯您的問題。 – Krishna 2012-02-14 05:46:48

+1

你是說你正在你的視圖控制器中創建一個UIButton,並將它作爲視圖控制器視圖的子視圖並添加到uitableview的一個單元中(它也被添加到相同視圖控制器的視圖中)?這不可能是一個好主意... – MGA 2012-02-14 05:49:37

+0

添加您的按鈕到您的新[查看addSubview:playButton] – Hiren 2012-02-14 06:06:36

回答

9

您要添加的UIView實際上是一個UIImageView。從文檔:

新的圖像視圖對象被配置爲默認忽略用戶事件。如果要處理UIImageView的自定義子類中的事件,則必須在初始化對象後明確將userInteractionEnabled屬性的值更改爲YES。

我認爲,要麼userInteractionEnabled級聯到子視圖或上海華將無法通過觸摸到它的子視圖在這種情況下,讓你的按鈕將不會被接受的一面。設置你的圖像視圖有.userInteractionEnabled = YES,你應該沒問題。

+0

它的作品!謝謝你的幫助!!很高興我在創建示例代碼時不小心將它保留爲UIImageView哈哈。 – 2012-02-14 07:33:36

+0

沒問題。順便說一下,這是一個完美形成的問題 - 清晰的例子,易於複製,所有信息存在,自我包含 - 繼續保持! – jrturton 2012-02-14 08:07:22

1

我有同樣的問題,並嘗試了一切。終於做到了的事情是實現該方法

(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

只返回無論高度是你的自定義單元格(在NIB文件看)

+0

感謝您發佈此提示。我有同樣的問題,並檢查了所有的視圖'userInteractionEnabled''屬性設置了正確的次數比我想承認。 原來我重寫了''tableView:heightForRowAtIndexPath:''並且由於某種未知的原因返回0。 – Col 2015-04-03 12:37:18

0

取而代之的按鈕,你可以嘗試用圖像相同。您可以定義在單擊圖像時調用哪個方法。

相關問題