UICollectionView
에 사용자 지정 흐름 레이아웃이 있는데 이는 항목을 삭제할 수있는 가능성입니다. 색인을 검색하기 위해 함수를 사용합니다 :보낸 사람이 때때로 잘못된 값을 보냅니다.
-(void)aMethod:(UIButton*)sender{
[self.viewModel deleteAt:[sender tag]];
[self.myCollectionView reloadData];
}
간혹 (드물게) 충돌이 발생했습니다. 나는 그걸 파헤쳐 보면, 때로는 [sender tag]
이 정확하지 않다는 사실을 발견했다. 왜 그런 일이 일어 났습니까? 배열에 5 개의 항목 만 있었을 때 8 개를 보내는 것으로 나타났습니다.
버튼이 같이있는 UITableViewCell 위에 배치 간단한 40x40 너비/높이 이미지이다
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이고 색인이 0 - 7 인 8 개의 항목이 있다고 가정하면 목록의 첫 번째 항목이 삭제됩니다. 이제 색인이 0 - 6 인 7 개의 항목이 있습니다. 그러나 태그가 0 인 버튼을 삭제하고 나머지 버튼 태그는 여전히 1 - 7로 번호가 매겨집니다. 큰. 고정 인덱스 태그를 기반으로 삭제하지 마십시오. 컬렉션의 단추 인덱스를 기반으로 삭제하십시오. – christopherdrum
@christopherdrum 잘, 그 경우에는 언제든지 충돌을 얻을 것이다,하지만 그것은 아주 드물게 발생합니다. 답변을 주셔서 감사합니다. –
아니요, 매번 충돌하지 않습니다. 일을 삭제하는 순서에 따라 달라집니다. 역순으로 삭제할 경우, 맨 아래로, 그것은 전혀 충돌하지 않을 것입니다. – christopherdrum