我的视图中有一个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方法。我发现此问题的解决方案是向滚动视图添加手势识别器。但在此解决方案中,我们无法检查选择了哪个单元格(或哪个手势识别器)。有谁能帮我找到解决这个问题的方法?
答案 0 :(得分: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 :(得分:1)
将滚动视图放在滚动视图中通常是一个坏主意。 UITableView也只是一个UIScrollView。只有当它们在不同的轴上滚动时才有效,即外部滚动视图垂直滚动而内部滚动水平。
对于您的特定情况,您必须自己触发选择。一旦有了对单元格的引用,就可以向表视图询问它的indexPath。然后你会为didSelectRow调用委托方法......你自己。
答案 2 :(得分:1)
在使用scrollview的解决方案中,您无法滚动滚动视图,因为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
}