上記の様な挙動を実現したくコードを下記のように記述しております。
(ボタンはCollectionViewのCellの子要素として設置しています。)
ViewController.m
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { CollectionViewCell *cell = (CollectionViewCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath]; if(_dbPhotoData.count == 0) { [cell searchResultsSetCell:(UIImageView *)[cell viewWithTag:1]tag:self.photoData[indexPath.row].url url:[NSURL URLWithString:_photoData[indexPath.row].url] image:nil viewController:self]; } else { [cell searchResultsSetCell:(UIImageView *)[cell viewWithTag:1]tag:self.photoData[indexPath.row].url url:[NSURL URLWithString:_photoData[indexPath.row].url] image:self.dbPhotoData[indexPath.row].states viewController:self]; } return cell; }
CollectionViewCell.m
- (IBAction)wishButtonTapped:(id)sender { [_wishButton setImage:[UIImage imageNamed:@"unwish"] forState:UIControlStateNormal]; DataBase *db = [DataBase new]; if([db checkExistsUrl:(NSString *)_imageUrl]) { [_wishButton setImage:[UIImage imageNamed:@"unwish"] forState:UIControlStateNormal]; [db deleteWithData:self.imageUrl]; } else { [_wishButton setImage:[UIImage imageNamed:@"wish"] forState:UIControlStateNormal]; [db insertWithData:self.imageUrl]; } if ([self.delegate respondsToSelector:@selector(searchCellUpdate)]) { [self.delegate searchCellUpdate]; } } - (void)searchResultsSetCell:(UIImageView *)viewWithTag tag:(NSString *)url url:(NSURL *)imageUrl image:(NSString *)states viewController:(id<ReloadDelegate>)viewController { _photoImageView = viewWithTag; _tagNo = viewWithTag; _imageUrl = url; self.delegate = viewController; _photoStates = states; [_photoImageView setImageWithURL:imageUrl placeholderImage:nil]; }
問題点
・タップの度にボタンは切り替わるがセルが複数ある場合タップしていないボタンまで切り替わってしまう。
例えばセルが100件表示されていた場合に一番左上のセルのボタンだけ押しているのに、意図しない他のセルまで※2の状態になってしまう。
どのセルのどのボタンが押されたのかうまく識別できていないから起こっているのかと思っています。
ボタンをタップした時に**_tagNo**をNSLogで出力させると、セルのタグ番号は出力されます。
このプロパティを使ってうまく識別できないものかと、考えているのですがどの様に実装すれば識別できますでしょうか。
意図が伝わらなかったり、必要な情報が欠けていましたらご指摘いただけますでしょうか。
どなたかご教示いただけましたら、幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/30 11:56