스 와이프하여 셀을 삭제하면 tableViewHeader가 셀과 함께 이동합니다.
iOS 8 tableViewHeader
에서 my UITableView
에서 이상한 버그가 발생했습니다 . 셀을 스 와이프하여 삭제 버튼 (표준 iOS 스 와이프하여 삭제)을 표시하면 스 와이프 tableViewHeader
중인 셀과 함께 이동합니다 . 셀을 스 와이프하면 헤더가 스 와이프되는 셀과 동일한 방식으로 이동합니다. 테이블보기의 다른 셀은 이동되지 않으며 머리글과 스 와이프되는 셀만 이동됩니다. iOS 7에서 이것을 테스트했지만 문제가 발생하지 않았습니다. 나에게 이것은 tableViewHeader
iOS 8 의 버그처럼 보입니다 .이 버전에서만 발생하고 절대 발생해서는 안되는 것 같습니다. 헤더가 스 와이프하여 삭제에 포함될 이유가 없습니다.
아래는 모형입니다. 앱 내에서 스 와이프하여 삭제는 기본 iOS이며 사용자 지정은 없습니다.
ferris의 답변을 바탕으로 UITableViewCell을 섹션 헤더로 사용할 때 가장 쉬운 방법은 viewForHeaderInSection에서 셀의 contentView를 반환하는 것입니다. 코드는 다음과 같습니다.
override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let cell : cellSectionHeader = tableView.dequeueReusableCellWithIdentifier("SectionHeader") as cellSectionHeader
return cell.contentView
//cellSectionHeader is my subclassed UITableViewCell
}
이것은 UITableViewCell을 테이블의 헤더로 사용했기 때문에 발생했습니다. 스 와이프 문제를 해결하기 위해를 사용하는 대신 tableView.tableHeaderView = cell
다음을 사용합니다.
UIView *cellView = [[UIView alloc] init];
[cellView addSubview:cell];
tableView.tableHeaderView = cellView
왜 이것이 문제를 해결하는지 모르겠습니다. 특히 iOS 7에서 작동했기 때문에 문제가 해결되는 것 같습니다.
모든 뷰를 cell view에 추가해야합니다. 그렇지 않으면 버튼이 반응하지 않습니다.
공장:
[cell addSubview:view];
또는 [self addSubview:view];
작동하지 않음 :
[cell.contentView addSubview:view]
또는 [self.contentView addSubview:view]
The way to avoid the headers moving with the cells is to return the contentView of the cell in viewForHeaderInSection. If you have a subclassed UITableViewCell named SectionHeaderTableViewCell, this is the correct code:
-(UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
SectionHeaderTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SectionHeader"];
//Do stuff to configure your cell
return cell.contentView;
}
SWIFT 3.0 Tested solution. As mentioned in the first example for Objective-C; the key point is returning cell.contentView instead of cell So new format syntax is as below.
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
// HeaderCell is the name of custom row designed in Storyboard->tableview->cell prototype
let cell = tableView.dequeueReusableCell(withIdentifier: "HeaderCell")
cell.songLabel.text = "Your Section Name"
return cell.contentView
}
Try implementing this method and give proper conditions for checking the swipe.If this method get called for header view.
1.tableView:editingStyleForRowAtIndexPath: 2.tableView:titleForDeleteConfirmationButtonForRowAtIndexPath: 3.tableView:shouldIndentWhileEditingRowAtIndexPath:
.contentView 메서드에서 언급되지 않은 한 가지 문제는 테이블 뷰 셀이 layoutSubviews를 사용하는 경우 원하는 동작을 얻지 못할 수 있다는 것입니다. layoutSubviews가 호출되지 않기 때문입니다. 결국 일반 셀 작업과 헤더 작업을 모두 지원하는 완전히 별도의 UIView 하위 클래스를 만들고이를 사용하는 최소한의 UITableView 셀 클래스를 만들었습니다.
Victor의 배경색 손실 문제는 Brad의 답변에 다음과 같이 추가하여 해결됩니다.
cell.backgroundColor = UIColor.cyanColor()
에:
cell.contentView.backgroundColor = UIColor.cyanColor()
'programing' 카테고리의 다른 글
명령 줄을 통한 이미지 압축 도구 (0) | 2021.01.15 |
---|---|
SQL Server Compact는 Visual Studio 2013에서 중단됩니까? (0) | 2021.01.15 |
기기가 충전 중이거나 앱이 포 그라운드 인 경우에만 무음 푸시 알림이 전달됩니다. (0) | 2021.01.15 |
사용자 입력을 삭제하는 것이 가장 좋은시기는 언제입니까? (0) | 2021.01.15 |
JOIN이 WHERE보다 빠릅니까? (0) | 2021.01.15 |