터치 후 테이블 뷰 셀이 강조 표시되는 원인은 무엇입니까? 셀을 클릭하면 상세보기를 누를 때 강조 표시된 상태를 볼 수 있습니다. 디테일 뷰가 팝업되면 셀이 여전히 강조 표시됩니다.
답변
당신은 didSelectRowAtIndexPath
당신 deselectRowAtIndexPath
이 셀을 선택 취소 전화해야합니다 .
그래서 당신이하고있는 다른 일은 didSelectRowAtIndexPath
그냥 전화하십시오 deselectRowAtIndexPath
.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Do some stuff when the row is selected
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
답변
가장 깨끗한 방법은 viewWillAppear에 있습니다.
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// Unselect the selected row if any
NSIndexPath* selection = [self.tableView indexPathForSelectedRow];
if (selection) {
[self.tableView deselectRowAtIndexPath:selection animated:YES];
}
}
이런 식으로 컨트롤러로 돌아갈 때 선택을 페이드 아웃하는 애니메이션이 있어야합니다.
http://forums.macrumors.com/showthread.php?t=577677 에서 가져온
스위프트 버전
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// deselect the selected row if any
let selectedRow: IndexPath? = tableView.indexPathForSelectedRow
if let selectedRowNotNill = selectedRow {
tableView.deselectRow(at: selectedRowNotNill, animated: true)
}
}
답변
서브 클래스 했습니까 -(void)viewWillAppear:(BOOL)animated
? [super viewWillAppear:animated];
사용자 정의 메소드를 호출하지 않으면 선택한 UITableViewCell이 선택 취소되지 않습니다 .
답변
Swift 사용자의 경우이를 코드에 추가하십시오.
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
}
Obj-C 대신 Swift를 제외하고는 paulthenerd의 대답입니다.
답변
스위프트 3 솔루션
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath as IndexPath, animated: true)
}
답변
UITableViewCell을 사용하는 경우 다음 줄을 주석으로 처리하십시오.
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
// [super setSelected:selected animated:animated];
}
도움이 되었기를 바랍니다.
답변
스위프트 4로 업데이트
이전 답변을 기반으로 한 몇 가지 실험을 거친 후 두 가지 방법으로 최상의 행동을 얻을 수 있다는 결론을 얻었습니다. (실제로 거의 동일)
// First Solution: delegate of the table View
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: false)
}
// Second Solution: With the life cycle of the view.
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
let selectedRow: IndexPath? = tableView.indexPathForSelectedRow
if let selectedRow = selectedRow {
tableView.deselectRow(at: selectedRow, animated: false)
}
}
나는 더 간결하기 때문에 개인적으로 첫 번째 솔루션을 채택하고 있습니다. tableView로 돌아갈 때 약간의 애니메이션이 필요한 경우 또 다른 가능성은 다음을 사용하는 것입니다 viewWillAppear
.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let selectedRow: IndexPath? = _view.tableView.indexPathForSelectedRow
if let selectedRow = selectedRow {
_view.tableView.deselectRow(at: selectedRow, animated: true)
}
}
마지막으로 UITableViewController를 사용하는 경우 clearsSelectionOnViewWillAppear 속성을 활용할 수도 있습니다 .