에서 행을 누르면 UITableView
행이 강조 표시되고 선택됩니다. 이것을 비활성화하여 행을 두드리면 아무것도 할 수 없습니까?
에서 행을 누르면 UITableView
행이 강조 표시되고 선택됩니다. 이것을 비활성화하여 행을 두드리면 아무것도 할 수 없습니까?
답변:
나를 위해 다음이 잘 작동했습니다.
tableView.allowsSelection = false
이것은 didSelectRowAt#
단순히 작동하지 않는다는 것을 의미 합니다. 즉, 테이블의 행을 만지면 절대로 아무것도하지 않습니다. (따라서 분명히 선택된 애니메이션은 없을 것입니다.)
(셀에서, UIButton
또는 다른 컨트롤이있는 경우 물론 해당 컨트롤은 계속 작동합니다. 테이블 셀에 대해 발생하는 모든 컨트롤은 UITableView의 "행 선택"기능과 전혀 관련이 없습니다. 사용하여 didSelectRowAt#
.)
주의해야 할 또 다른 사항은 다음과 같습니다 UITableView
. 편집 모드에 있을 때는 작동하지 않습니다 . 편집 모드에서 셀 선택을 제한하려면 다음과 같은 코드를 사용하십시오.
tableView.allowsSelectionDuringEditing = false
selectionStyle
셀 의 속성을 cell.selectionStyle = UITableViewCellSelectionStyle.None
Swift 또는 cell.selectionStyle = UITableViewCellSelectionStyleNone
Objective-C에서 설정해야합니다 .
tableView.allowSelection = false
tableViewDidSelectRowAtIndexPath
호출하려면 cell.selectionStyle = .None
원하는 것이 좋습니다. 해당 델리게이트 함수를 호출하거나 원하지 않는 경우 (즉, tableViewCell에 텍스트 필드가 있음) 설정 tableView.allowsSelection = false
은 괜찮습니다.
다음 UITableViewCell
중 하나를 사용 하여 인스턴스 에서 선택 스타일을 설정하기 만하면 됩니다.
목표 -C :
cell.selectionStyle = UITableViewCellSelectionStyleNone;
또는
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
스위프트 2 :
cell.selectionStyle = UITableViewCellSelectionStyle.None
스위프트 3과 4.x :
cell.selectionStyle = .none
또한 -tableView:didSelectRowAtIndexPath:
테이블 뷰 대리자에서 구현하지 않거나 구현하지 않을 경우 조치를 취하지 않을 셀을 명시 적으로 제외해야합니다.
최근 에이 게시물을 읽었으며 도움이 되었기 때문에 (후손을 위해) 모든 답변을 통합하기 위해 다른 답변을 게시하고 싶었습니다.
따라서 원하는 논리 및 / 또는 결과에 따라 실제로 5 가지 답변이 있습니다.
1. 셀의 다른 상호 작용을 변경하지 않고 파란색 강조 표시를 비활성화하려면
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
UITableViewCell에 호스팅 된 UIButton (또는 다른 컨트롤)이 있고 사용자가 컨트롤과 상호 작용할 수 있지만 셀 자체는 아닌 상호 작용을 원할 때 이것을 사용합니다.
참고 : Tony Million은 위에서 언급했듯이이를 방지하지 못합니다tableView:didSelectRowAtIndexPath:
. 간단한 "if"문으로이 문제를 해결합니다. 대부분 섹션을 테스트하고 특정 섹션에 대한 조치를 피합니다.
이와 같은 셀 태핑을 테스트하는 다른 방법은 다음과 같습니다.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// A case was selected, so push into the CaseDetailViewController
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (cell.selectionStyle != UITableViewCellSelectionStyleNone) {
// Handle tap code here
}
}
2. 전체 테이블에 대해이 작업을 수행하려면 위의 솔루션을 테이블의 각 셀에 적용 할 수 있지만이 작업을 수행 할 수도 있습니다.
[tableView setAllowsSelection:NO];
내 테스트에서 여전히 내부의 컨트롤 UITableViewCell
을 대화식으로 허용합니다 .
셀을 "읽기 전용"으로 만들려면 다음과 같이하면됩니다.
[cell setUserInteractionEnabled:NO];
4. 전체 테이블을 "읽기 전용"으로 만들기
[tableView setUserInteractionEnabled:NO];
셀을 강조 표시할지 여부를 즉시 결정하려면 ( 이 답변 에 따라 선택 이 포함됨) 다음 UITableViewDelegate
프로토콜 방법을 구현할 수 있습니다 .
- (BOOL)tableView:(UITableView *)tableView
shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
tableView:shouldHighlightRowAtIndexPath:
있다 일반적으로 (항상) 내 선호 된 접근을.
내가 구현 한 경험을 바탕으로 정답이라고 생각하는 것을 요약하면 다음과 같습니다.
일부 셀에 대해서만 선택을 사용하지 않으려면 다음을 사용하십시오.
cell.userInteractionEnabled = NO;
선택을 방지 할뿐만 아니라 설정된 셀에 대해 tableView : didSelectRowAtIndexPath : 호출을 중지합니다. (이 답변에 대해 크레딧은 Tony Million에게갑니다. 감사합니다!)
셀에 클릭해야하는 버튼이 있으면 대신 다음을 수행해야합니다.
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
의 셀에 대한 클릭도 무시해야합니다 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
.
전체 테이블에 대해 선택을 비활성화하려면 다음을 사용하십시오.
tableView.allowsSelection = NO;
(Paulo De Barros에게 감사드립니다!)
아이폰 OS 6.0으로 UITableViewDelegate
있다 tableView:shouldHighlightRowAtIndexPath:
. (iOS 문서 에서 이에 대해 읽으십시오 .)
이 방법을 사용하면 셀의 선택 스타일을 변경하거나 셀의 이벤트 처리를 방해 userInteractionEnabled = NO
하거나 여기에 문서화 된 다른 기술 을 사용하지 않고도 특정 행을 강조 표시 할 수없고 암시 적으로 선택할 수없는 것으로 표시 할 수 있습니다.
당신은 선택하여 자체 빌더 인터페이스에서 행의 비활성화 선택도 할 수 NoSelection
로부터 selection
아래 그림과 같이 관리자 창에서 (jQuery과 속성의) 옵션
스위프트 3을위한 고정 솔루션
cell.selectionStyle = .none
로부터 UITableViewDelegate
프로토콜 당신이 방법을 사용할 수 있습니다 willSelectRowAtIndexPath
그리고 return nil
당신은 행을 선택하지 않을 경우.
같은 방법으로 willDeselectRowAtIndexPath
메소드를 사용할 수 return nil
있으며 행을 선택 취소하지 않으려는 경우.
1- 당신이해야 할 일은 다음 중 하나를 사용 하여UITableViewCell
인스턴스 에서 선택 스타일을 설정하는 것입니다.
목표 -C :
cell.selectionStyle = UITableViewCellSelectionStyleNone;
또는
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
스위프트 2 :
cell.selectionStyle = UITableViewCellSelectionStyle.None
스위프트 3 :
cell.selectionStyle = .none
2-구현하지 마십시오- tableView:didSelectRowAtIndexPath:
테이블보기에서 구현하지 않으면 delegate
조치를 취하지 않을 셀을 명시 적으로 제외하십시오.
3-또한 스토리 보드에서 할 수도 있습니다. 테이블 뷰 셀을 클릭하고 테이블 뷰 셀 아래의 속성 관리자에서 선택 옆의 드롭 다운을 없음으로 변경하십시오.
4-(iOS) Xcode 9, Swift 4.0 에서 아래 코드를 사용하여 테이블 셀 강조 표시를 비활성화 할 수 있습니다
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "OpenTbCell") as! OpenTbCell
cell.selectionStyle = .none
return cell
}
스 니펫 아래에서 강조 표시를 비활성화하지만에 대한 호출도 비활성화합니다 didSelectRowAtIndexPath
. 따라서 구현하지 않으면 didSelectRowAtIndexPath
아래 방법을 사용하십시오. 테이블을 만들 때 추가해야합니다. 이것은 버튼과 UITextField
셀 내부에서 작동합니다 .
self.tableView.allowsSelection = NO;
스 니펫 아래에서 강조 표시를 비활성화하고에 대한 호출을 비활성화하지 않습니다 didSelectRowAtIndexPath
. 셀의 선택 스타일을 없음으로 설정하십시오.cellForRowAtIndexPath
cell.selectionStyle = UITableViewCellSelectionStyleNone;
스 니펫 아래에서 셀의 모든 항목을 사용 중지합니다. 이에 상호 작용을 비활성화합니다 buttons
, textfields
:
self.tableView.userInteractionEnabled = false;
아래는 Swift
위의 Objective-C
솔루션 과 동일 합니다.
첫 번째 솔루션 교체
self.tableView.allowsSelection = false
두 번째 솔루션 교체
cell?.selectionStyle = UITableViewCellSelectionStyle.None
세 번째 솔루션 교체
self.tableView.userInteractionEnabled = false
다음을 입력하십시오.
cell.selected = NO;
필요할 때 행을 선택 해제합니다.
스위프트 3에서 ...
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let r = indexPath.row
print("clicked .. \(r)")
tableView.cellForRow(at: indexPath)?.setSelected(false, animated: true)
}
나는 재산 UITableViewCell
의 사용을 금지 하는 통제력을 가지고 상당히 풍부하게 싸우고 userInteractionEnabled
있습니다. 설정에 대한 3 셀 정적 테이블, 날짜가있는 2, 켜기 / 끄기 스위치가있는 1이 있습니다. Storyboard / IB에서 게임을 한 후에 하단을 선택할 수 없게 만들었지 만 탭하면 맨 위 행 중 하나에서 선택이 사라집니다. 내 설정 UITableView의 WIP 이미지는 다음과 같습니다.
세 번째 행을 탭해도 아무 일도 일어나지 않으면 선택은 두 번째 행에 유지됩니다. 이 기능은 사실상 Apple의 캘린더 앱의 이벤트 추가 시간 선택 화면의 사본입니다.
코드는 놀랍게도 호환 가능합니다. IOS2 = / :
- (NSIndexPath *)tableView: (UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 2) {
return nil;
}
return indexPath;
}
이것은 선택 스타일을 없음으로 설정하는 것과 함께 작동하므로 터치 다운 이벤트에서 셀이 깜박이지 않습니다.
나는 이것을 사용하여 나를 위해 일하고있다.
cell?.selectionStyle = UITableViewCellSelectionStyle.None
이것은 선택하는 동안 행에 강조 표시가 나타나지 않도록하는 가장 쉽고 쉬운 솔루션이지만
cell.selectionStyle = UITableViewCellSelectionStyleNone;
또한 행이 선택되었다는 것을 간단히 보여주고 끄는 것이 유용한 경우가 종종 있습니다. 그러면 사용자에게 선택하려는 내용을 확인하는 알림이 표시됩니다.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:NO];
...
}
또한 사용하고 UITableViewCellSelectionStyleNone
싶지 않거나 사용할 수없는 경우 와 같은 효과를 얻기 위해 배경색을 Clear로 설정할 수도 있습니다 UITableViewCellSelectionStyleNone
.
다음과 같은 코드를 사용합니다.
UIView *backgroundColorView = [[UIView alloc] init];
backgroundColorView.backgroundColor = [UIColor clearColor];
backgroundColorView.layer.masksToBounds = YES;
[cell setSelectedBackgroundView: backgroundColorView];
각 셀에 추가 색상보기를 추가 할 때 성능 이 저하 될 수 있습니다 .
당신이 사용할 수있는 :
cell.selectionStyle = UITableViewCellSelectionStyleNone;
UITableView의 인덱스 경로 메소드에서 행의 셀에.
또한 당신은 사용할 수 있습니다 :
[tableView deselectRowAtIndexPath:indexPath animated:NO];
tableview didselectrowatindexpath 방법에서.
cell.selectionStyle = UITableViewCellSelectionStyle.none
스위프트 3에 있습니다.
selection
을 원하고 물론 물론highlighting
비활성화됩니다. 많은 투표 응답disable selection
은 비활성화 방법을 설명 하고 비활성화하지 않습니다highlighting
. 강조 표시 만 비활성화cell.selectionStyle = .None
하거나 다음으로 이동storyboard / cell / Selection = None