2013-04-28 74 views
0

我試圖使用CollapseClick表控件。這一切都有效,但我似乎無法將按鈕事件添加到表格單元格展開時顯示的視圖中。iOS - 捕獲按鈕點擊子視圖添加到UITableViewCell

通過代碼查看,它是UITableView,它創建了UITableViewCell s並動態添加UIView s。我認爲UIView在這裏補充說:

+ (CollapseClickCell *)newCollapseClickCellWithTitle:(NSString *)title index:(int)index content:(UIView *)content { 
    NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"CollapseClickCell" owner:nil options:nil]; 
    CollapseClickCell *cell = [[CollapseClickCell alloc] initWithFrame:CGRectMake(0, 0, 320, kCCHeaderHeight)]; 
    cell = [views objectAtIndex:0]; 

    // Initialization Here 
    cell.TitleLabel.text = title; 
    cell.index = index; 
    cell.TitleButton.tag = index; 
    cell.ContentView.frame = CGRectMake(cell.ContentView.frame.origin.x, cell.ContentView.frame.origin.y, cell.ContentView.frame.size.width, content.frame.size.height); 
    [cell.ContentView addSubview:content]; 

    return cell; 
} 

的按鈕顯示,但如果我嘗試和掛鉤的任何事件,我不能捕獲它們。

這可能很簡單。我已經把應用程序放在這裏:http://www.havoc-media.com/TravelApp.zip

+0

湯姆,我已經找到了解決您的問題/秒。 – 2013-04-30 15:31:17

回答

1

看着你的代碼,你有幾個忽略,當涉及到使用視圖。

瞭解視圖最重要的是,爲了讓子視圖上的點擊事件註冊,父視圖不能小一些。這裏愚蠢的是,即使你可以直觀地看到你注入到你的ContentView中的視圖,內容視圖的寬度被設置爲零,這意味着ContentView中的所有視圖都可以顯示,但不會響應點擊事件和點擊事件將默認爲ContentView的父視圖,從而使您的按鈕無法使用且無響應。

要在openCollapseClickCellAtIndex解決這個問題,你需要添加代碼:

cell.ContentView.frame = CGRectMake(cell.ContentView.frame.origin.x, cell.ContentView.frame.origin.y, 320, cell.ContentView.frame.size.height); 

你的第二個問題是你CollapseClickCell廈門國際銀行創建不傳送回視圖控制器。這意味着你在視圖控制器中創建的視圖,並注入到你想要報告給視圖控制器的CollapseClickCell xib中。

有一種方法可以解決這個問題,但在我看來,我會創建另一個定製xib-A來注入到您的CollapseClickCell中,並讓xib-A處理您的按鈕單擊事件而不是test1View。創建一個名爲「testView」鏈接到測試類和廈門國際銀行將此代碼放在

-(UIView *)viewForCollapseClickContentViewAtIndex:(int)index 
{ 
    NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"testView" owner:nil options:nil]; 

    UIView *content = [views objectAtIndex:0]; 

    switch (index) { 
    case 0: 
     return content; /*test1View;*/ 
     break; 

一旦這兩個問題都得到解決,您的代碼將工作。如果你想看到它,我可以添加我對你的代碼的補充來使它工作。

+0

謝謝本尼 - 這讓我爲了你而蠢蠢欲動。你是怎麼知道UIView大小問題的? Intrigued ..設定爲「定製xib-A注入」我會用xib替換UIViews - 連接到他們自己的視圖控制器? – 2013-05-03 08:26:26

+0

假設「定製xib-A注入」我會用xib替換UIViews - 連接到它們自己的視圖控制器? - >是的,還是他們自己的類,就像你用ContentCell xib一樣。很高興我能幫忙,項目看起來不錯! – 2013-05-03 15:11:32

0

首先,這段代碼是不正確的:

NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"CollapseClickCell" owner:nil options:nil]; 
CollapseClickCell *cell = [[CollapseClickCell alloc] initWithFrame:CGRectMake(0, 0, 320, kCCHeaderHeight)]; 
cell = [views objectAtIndex:0]; 

你是第一個通過[collapseClickCell alloc]創建一個單元格。但在此之後,將用loadNibNamed:owner:options:nil創建的數組的第一個對象分配給同一個變量。您可以從筆尖加載單元格或以編程方式創建單元格。簡單地說,你應該只使用:

NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"CollapseClickCell" owner:nil options:nil]; 
CollapseClickCell *cell = [views objectAtIndex:0]; 

要知道,你是提供給initWithFrame:方法RECT沒有被所有

添加按鈕用於在細胞並不是最合適的事物(整個單元應該是按鈕)。但是,如果你絕對需要,嘗試分配一個uibutton作爲細胞的附屬視圖。看看類似http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewCell_Class/Reference/Reference.html#//apple_ref/occ/instp/UITableViewCell/accessoryView

東西:

UITableViewCell *cell = (obtain your cell) 
UIButton *button= [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[button addTarget:self action:@selector(buttonTapped) forControlEvents:UIControlEventTouchUpInside]; 
button.frame = CGRectMake(x,y,width,height); 
cell.accessoryView = button; 
+0

雖然正確這仍然沒有解決按鈕沒有響應的問題。 – 2013-04-30 17:11:43

+0

它應該;如果一個單元的附件視圖是UIControl,它應該響應點擊。這就像使用默認泄露指示器(藍色圓形箭頭) – txulu 2013-05-02 08:45:28

+0

您需要查看代碼並嘗試您的響應,內容單元的寬度仍然爲0,從而不會響應觸摸事件。 不是說你說的是錯的,它需要解決,它只是沒有解決問題 – 2013-05-02 13:50:17