0

ビューにテーブルビューがあります。セルは、カスタムセルを使用して作成されます。テーブルビューのセルに大きな文字列を表示する必要があるため、スクロールビューにテキストラベルを追加しました。また、ユーザーがテーブルビューセルをタップしたときにコードを実行する必要があります。以下のコードを参照してください。

 [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;

問題は、ユーザーがスクロールビューの上をタッチすると、テーブルビューが選択したメソッドが呼び出されないことです。この問題に対して私が見つけた解決策は、スクロールビューにジェスチャ認識機能を追加することです。ただし、このソリューションでは、どのセル(またはどのジェスチャ認識機能)が選択されたかを確認する方法がありません。誰かが私がこの問題の解決策を見つけるのを手伝ってもらえますか?

4

3 に答える 3

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];

                    ...
    }
}
于 2012-12-10T09:00:28.110 に答える
1

一般に、スクロールビューをスクロールビュー内に配置することはお勧めできません。UITableViewも単なるUIScrollViewです。これは、異なる軸でスクロールしている場合にのみ機能します。つまり、外側のスクロールビューは垂直方向にスクロールし、内側のスクロールビューは水平方向にスクロールします。

特定のシナリオでは、自分で選択をトリガーする必要があります。セルへの参照を取得したら、テーブルビューにそのindexPathを要求できます。次に、didSelectRow...のデリゲートメソッドを自分で呼び出します。

于 2012-12-10T09:04:32.273 に答える
1

スクロールビューを使用したソリューションでは、gestureRecognizerがタッチを取得するため、スクロールビューでスクロールすることはできません。そのため、私はスクロールビューをまったく使用しません。

次のように、ラベルのサイズをコンテンツに合わせて変更します。

    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
}
于 2012-12-10T10:35:01.070 に答える