2012-12-10 216 views
0

我在我的視圖中有一個tableview。單元格是使用自定義單元格創建的。我需要在表格視圖單元格中顯示一個大字符串所以我在Scrollview中添加了文本Label。當用戶點擊表格視圖單元格時,我也需要執行一些代碼。請看下面的代碼:識別表格單元格,當點擊識別器時點擊

[cell.textLabelLine2 setFrame:CGRectMake(cell.textLabelLine2.frame.origin.x, cell.textLabelLine2.frame.origin.y, 500, cell.textLabelLine2.frame.size.height)]; 
    cell.scrollView.contentSize = CGSizeMake(cell.textLabelLine2.text.length*10 , 10); 
    cell.scrollView.pagingEnabled = NO; 

問題是當用戶觸摸上面的Scroll View時,Tableview的select方法不會被調用。我發現這個問題的解決方案是爲滾動視圖添加手勢識別器。但是在這個解決方案中,我們沒有辦法檢查哪個單元格(或哪個手勢識別器)被選中。任何人都可以幫助我找到解決這個問題的辦法嗎?

回答

1

你可以通過下面的代碼

if(gestureRecognizer.state == UIGestureRecognizerStateBegan) { 
    CGPoint p = [gestureRecognizer locationInView:[self tableView]]; 

    NSIndexPath *indexPath = [[self tableView] indexPathForRowAtPoint:p]; 

    if(indexPath != nil) { 

     UITableViewCell *cell = [[self tableView] cellForRowAtIndexPath:indexPath]; 

        ... 
    } 
} 
1

它通常是一個壞主意把滾動視圖滾動視圖裏面知道單元。 UITableView也只是一個UIScrollView。如果它們在不同的軸上滾動,即外部滾動視圖垂直滾動並且內部滾動水平,那隻能是這類作品。

對於您的特定場景,您必須自己觸發選擇。一旦你有了單元格的引用,你可以向表格視圖索引它的indexPath。然後你可以自己調用didSelectRow的委託方法。

1

在滾動視圖的解決方案中,您無法在滾動視圖中滾動,因爲gestureRecognizer'獲取'觸摸。因此我根本不會使用scrollview。

使標籤尺寸調整到其內容,如:

CGSize customTextLabelSize = [cell.customTextLabel.text sizeWithFont:cell.customTextLabel.font constrainedToSize:CGSizeMake(cell.customTextLabel.frame.size.width, 999999)]; 
    cell.customTextLabel.frame = CGRectMake(cell.customTextLabel.frame.origin.x, cell.customTextLabel.frame.origin.y, cell.customTextLabel.frame.size.width, customTextLabelSize.height); 

您還需要實現這個在heightForRowAtIndexPath

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    CGSize cellSize = [bigTextString sizeWithFont:customTextLabel.font constrainedToSize:CGSizeMake(generalCellWidth, 999999)]; 
    return cellSize.height; 
} 

這種方式,您可以只使用didSelectRowAtIndex方法。



如果你真的想用滾動視圖,添加一個按鈕,在你的cellForRowAtIndexPath細胞:方法。使按鈕就那麼大的電池,並添加一個按鈕,標籤是這樣的:

UIButton *cellButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    cellButton.frame = CGRectMake(0, 0, cell.frame.size.width, cell.frame.size.height); 
    cellButton.tag = indexPath.row; 
    [cellButton addTarget:self action:@selector(cellButtonAction:) forControlEvents:UIControlEventTouchUpInside]; 
    [cell.contentView addSubview:cellButton]; 

然後加:

-(void)cellButtonAction:(UIButton*)sender 
{ 
    //do something with sender.tag 
}