0

セクションを使用してtableViewを作成し、カスタムセルを使用して、次のように画像を使用してチェックボックス(UIImageView)を定義します。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"cellIdentifier";
    StandardCellWithImage *cell = (StandardCellWithImage *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if(cell == nil) {
        cell = [[StandardCellWithImage alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cell.selectionStyle = UITableViewCellSeparatorStyleNone;
    }

    cell.checkbox.tag = indexPath.row;
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didSelectedImageAtIndexPath:)];
    tapGesture.numberOfTapsRequired = 1;
    tapGesture.delegate = self;
    [cell.checkbox addGestureRecognizer:tapGesture];
    cell.checkbox.userInteractionEnabled = YES;

    return cell;
}

そして、didSelectedImageAtIndexPathメソッドで私は使用します:

- (void) didSelectedImageAtIndexPath:(id) sender {
    UITapGestureRecognizer *gesture = (UITapGestureRecognizer *) sender;
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:gesture.view.tag inSection:0];
}

しかし、ここには、ユーザーがこの行をタップしたセクションがわからない行しかありません。それを認識する可能性はありますか?

4

2 に答える 2

2

view.tag内のアイテム/セクションを次のようにエンコードするとどうなりますか?

view.tag = indexPath.section * kMAX_SECTION_SIZE + indexPath.item;

その後、あなたはすることができます:

- (void) didSelectedImageAtIndexPath:(id) sender {
  UITapGestureRecognizer *gesture = (UITapGestureRecognizer *) sender;


  NSIndexPath *indexPath = [NSIndexPath indexPathForRow:gesture.view.tag % kMAX_SECTION_SIZE
                                        inSection:int(gesture.view.tag / kMAX_SECTION_SIZE)];
}
于 2013-01-20T18:12:10.657 に答える
1

cellForRowAtIndexPathのチェックボックス(セル内のボタン)にジェスチャを追加する代わりに、セル(StandardCellWithImage)自体にボタンアクションを実装し、そこからデリゲートを呼び出します。

  1. アクションをセルのボタンに設定し、そこに実装します。
  2. セルでプロトコルを宣言し、didSelectedImageAtIndexPathのように必要なメソッドを宣言します。
  3. このプロトコルをViewControllerに実装します
  4. cellForRowAtIndexPathのセルのデリゲートをselt(ビューコントローラー)に設定します
  5. セル内のチェックボックスメソッドをタップすると、チェックボックスボタンへのアクションとして設定したメソッドが呼び出されます。
  6. そこからデリゲートメソッドdidSelectedImageAtIndexPath:を呼び出します。そしてもちろん、[(UITableView *)self.superview indexPathForCell:self]を使用してそこからindexPathオブジェクトを返すことができます。//ここでself=custonセルオブジェクト

ノート:

テーブルのdataSourceの-tableView:cellForRowAtIndexPath:に設定したセルにtableViewへの弱参照を格納できます。これは、self.superviewが常にtableViewであることに依存しているため、より優れています。Appleが将来UITableViewのビュー階層を再編成する方法を誰が知っていますか。

于 2013-01-20T18:19:38.027 に答える