[ios] UITableView 선택을 비활성화하려면 어떻게해야합니까?

에서 행을 누르면 UITableView행이 강조 표시되고 선택됩니다. 이것을 비활성화하여 행을 두드리면 아무것도 할 수 없습니까?



답변

나를 위해 다음이 잘 작동했습니다.

tableView.allowsSelection = false

이것은 didSelectRowAt#단순히 작동하지 않는다는 것을 의미 합니다. 즉, 테이블의 행을 만지면 절대로 아무것도하지 않습니다. (따라서 분명히 선택된 애니메이션은 없을 것입니다.)

(셀에서, UIButton또는 다른 컨트롤이있는 경우 물론 해당 컨트롤은 계속 작동합니다. 테이블 셀에 대해 발생하는 모든 컨트롤은 UITableView의 “행 선택”기능과 전혀 관련이 없습니다. 사용하여 didSelectRowAt#.)

주의해야 할 또 다른 사항은 다음과 같습니다 UITableView. 편집 모드에 있을 때는 작동하지 않습니다 . 편집 모드에서 셀 선택을 제한하려면 다음과 같은 코드를 사용하십시오.

tableView.allowsSelectionDuringEditing = 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


답변

내가 구현 한 경험을 바탕으로 정답이라고 생각하는 것을 요약하면 다음과 같습니다.

일부 셀에 대해서만 선택을 사용하지 않으려면 다음을 사용하십시오.

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과 속성의) 옵션

UITableView 인스펙터


답변

스위프트 3을위한 고정 솔루션

cell.selectionStyle = .none