[XCODE] UIView上のタップ位置から、UITableView上のどのセル位置かを判断する方法
今日はちょっとマニアックなネタですが、
UIView上でタップイベントを補足した際に、タップ位置からUITableView上のどの位置かを見つける方法を
ブログに書きたいと思います。
例えば下図のUITableViewで、左の青丸をタップした際に、どのセルかを特定します。
なお、Xibファイルを使ってUITableViewCellの独自レイアウトを作る方法は、 [XCODE] UITableViewCellをカスタマイズする方法@YoheiM.NETを参考にしてみて頂けると幸いです。
また、UITapGestureRecognizerの使い方は、[XCODE] UIViewにタップした際のイベントを登録する@YoheiM.NET を参考にしてみて頂けると幸いです。
その中で、View上の座標を取得して、その座標を元に、TableView上の何セル目かを判断します。
やっと本題のところですw。
セルを取得したら、画像を非表示するなど、セル上の値を変化させることが出来ます。よっしゃ(*゚▽゚)ノ
新しく学んだ事は、今回みたいにまたブログに書きたいと思います。かなりマニアックなネタかと思いますが。
今回も最後までお読み頂きましてありがとうございました。
今回やりたいこと
UITableViewCellをカスタマイズして、Cell上に配置した画像をタップされた際に、 タップされたCellを特定したいと考えました。例えば下図のUITableViewで、左の青丸をタップした際に、どのセルかを特定します。
まずは青色に対するタップイベントを設定する
青色ボール画像に対するタップイベントを設定します。以下サンプルコードとなります。- (UITableViewCell *)tableView:(UITableView *)tView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // まずはUITableViewCellインスタンスを作る。 staticNSString *identifier = @"entryCell"; UITableViewCell *cell = [tableViewdequeueReusableCellWithIdentifier:identifier]; if (cell == nil) { NSBundle *bundle = [NSBundlemainBundle]; XibItemHolder *holder = [[XibItemHolderalloc] init]; [bundle loadNibNamed:@"FeedItemCell"owner:holder options:nil]; cell = holder.feedItemCell; } // 青色ボールのUIImageViewを取得する。 // 今回はタグ番号でアクセスする。 UIImageView *imageView = (UIImageView *)[cell viewWithTag:1]; // ユーザーからのアクションを許容する。 imageView.userInteractionEnabled = YES; // GestureRecognizerでタップイベントを付与する。 UITapGestureRecognizer *tap = [[UITapGestureRecognizeralloc] initWithTarget:selfaction:@selector(tapUnreadImage:)]; [imageView addGestureRecognizer:tap]; return cell; }上記で、青色ボールのイメージにタップイベントを設定できました。
なお、Xibファイルを使ってUITableViewCellの独自レイアウトを作る方法は、 [XCODE] UITableViewCellをカスタマイズする方法@YoheiM.NETを参考にしてみて頂けると幸いです。
また、UITapGestureRecognizerの使い方は、[XCODE] UIViewにタップした際のイベントを登録する@YoheiM.NET を参考にしてみて頂けると幸いです。
続いてTapイベントに反応する
青色ボールに対してタップイベントが発生したら、上記で登録したメソッドが呼び出されます。その中で、View上の座標を取得して、その座標を元に、TableView上の何セル目かを判断します。
やっと本題のところですw。
-(void)tapUnreadImage:(UIGestureRecognizer *)gesture { // タップした位置(座標点)を取得します。 CGPoint pos = [gesture locationInView:tableView]; // 座標点から、tableViewのメソッドを使って、NSIndexPathを取得します。 NSIndexPath *indexPath = [tableView indexPathForRowAtPoint:pos]; // indexPathを使って、TableView上のタップされた画像を持つCellを取得します。 UITableViewCell *cell = [tableViewcellForRowAtIndexPath:indexPath]; }これで目標のセルを取得することが出来ました。
セルを取得したら、画像を非表示するなど、セル上の値を変化させることが出来ます。よっしゃ(*゚▽゚)ノ
最後に
現在RSSリーダーを作っていますが、UITableViewをベースにした作りなので、 UITableView関連で良く詰まりますw。新しく学んだ事は、今回みたいにまたブログに書きたいと思います。かなりマニアックなネタかと思いますが。
今回も最後までお読み頂きましてありがとうございました。