UICollectionView
にはカスタムフローレイアウトがあり、その目的はアイテムを削除するための空き状況です。インデックスを取得するために関数を使用します。送信者が間違った値を送信することがあります
-(void)aMethod:(UIButton*)sender{
[self.viewModel deleteAt:[sender tag]];
[self.myCollectionView reloadData];
}
時には(まれに)クラッシュしました。私はそれを掘るとき、私は時々[sender tag]
が間違っていた、実際には、アイテムの数の高さの配列が見つかりました。なぜそれが起こるのですか?私は配列が5つの項目しか持っていなかったときに8を送信することが分かった。
ボタンこのようUITableViewCellの上方に配置され、単純な40×40の幅/高さ画像である:
UIButton *button = [UIButton new];
[button setImage:[UIImage imageNamed:@"m_delete"] forState:UIControlStateNormal];
if (self.shouldEdit){
self.layout.longPressGestureRecognizer.minimumPressDuration = 0.3f;
NSLog(@"1 blk called");
[button addTarget:self
action:@selector(aMethod:)
forControlEvents:UIControlEventTouchUpInside];
[button setTag:indexPath.row];
[cell addSubview:button];
[button mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(cell.mas_left).with.offset(2);
make.top.equalTo(cell.mas_top).with.offset(2);
}];
}
あなた自身の質問に答えたと思います。あなたが言ったように、タグの目的はアイテムを削除することでした。ただし、タグを変更しない限り、タグは静的なままです。つまり、インデックスが0〜7の8つのアイテムがあり、したがってタグが0〜7であるとしましょう。次に、リストの最初のアイテムを削除します。今度はインデックスが0〜6の7つのアイテムがありますが、タグが0のボタンは削除され、残りのボタンタグは1〜7の番号が付けられています。大。 固定インデックスタグに基づいて削除しないでください。コレクション内のボタンのインデックスに基づいて削除します。 – christopherdrum
@christopherdrumまあ、その場合、私は毎回クラッシュするだろうが、それは本当にまれに起こる。回答ありがとうございます。 –
いいえ、毎回クラッシュすることはありません。それはあなたが物事を削除する順序に依存します。逆の順序で、下から上に削除すると、おそらく全くクラッシュしません。 – christopherdrum