bestsource

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

bestsource 2023. 6. 3. 08:33
반응형

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

에서 누때를행에서 때.UITableView행이 강조 표시되고 선택됩니다.행을 눌러도 아무 일도 일어나지 않도록 설정할 수 있습니까?

이 해야 할 은 에 선택 입니다.UITableViewCell다음 중 하나를 사용하는 인스턴스:

목표-C:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

또는

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

스위프트 2:

cell.selectionStyle = UITableViewCellSelectionStyle.None

Swift 3 및 4.x:

cell.selectionStyle = .none

또한, 구현하지 않는지 확인하십시오.-tableView:didSelectRowAtIndexPath:테이블 보기에서 작업을 구현할 경우 수행하지 않을 셀을 위임하거나 명시적으로 제외합니다.

자세한 내용은 여기 및 여기에서 확인하십시오.

저에게는 다음과 같은 것들이 잘 작동했습니다.

tableView.allowsSelection = false

이것은 의미합니다.didSelectRowAt#전혀 효과가 없을 것입니다.즉, 테이블의 한 줄을 만지는 것은 전혀 도움이 되지 않습니다. (따라서 분명히, 선택된 애니메이션은 절대 없을 것입니다.)

에 (셀에있경우는, 같은경우과다음)▁(▁(,셀가 있는 경우 하십시오.UIButton또는 다른 제어 장치는 물론 해당 제어 장치는 여전히 작동합니다.셀에 모든 에게 "이 없습니다.didSelectRowAt#.)

은 다음과 같습니다이것은 작동하지 않습니다.UITableView편집 모드에 있습니다.편집 모드에서 셀 선택을 제한하려면 다음 코드를 사용합니다.

tableView.allowsSelectionDuringEditing = false 

제가 최근에 이 글을 읽고 도움이 되었기 때문에 (후대를 위해) 모든 답을 통합하기 위해 또 다른 답을 올리고 싶었습니다.



따라서 원하는 논리 및/또는 결과에 따라 실제로 5가지 다른 답이 있습니다.

1.셀의 다른 상호 작용을 변경하지 않고 파란색 강조 표시를 비활성화하려면:

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

UIButton(또는 다른 컨트롤)이 UITableViewCell에 호스트되어 있을 때 사용하며 사용자가 컨트롤과 상호 작용할 수 있지만 셀 자체와는 상호 작용할 수 없습니다.

참고: 위에서 Tony Million이 언급한 것처럼, 이것이 예방하지는 않습니다.tableView:didSelectRowAtIndexPath:이 문제는 단순한 "만약" 문장을 통해 해결할 수 있습니다. 대부분의 경우 섹션을 테스트하고 특정 섹션에 대한 작업을 피합니다.

제가 생각한 또 다른 방법은 이런 세포를 두드리는 것을 테스트하는 것입니다.

- (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의 각 할 수 다음과 같은 할 수 있습니다.2.표의 각 에 적용할 수 있습니다.

[tableView setAllowsSelection:NO];

테스트에서, 제테트에서여, 은내제허다니용합어를부 안에서 합니다.UITableViewCell상호작용을 합니다.


을 " 전용"으로 과 같이. 3. 셀을 "읽기 전용"으로 만들려면 다음과 같이 하면 됩니다.

[cell setUserInteractionEnabled:NO];



테이블을 " 전용으로 . 전체 테이블을 "읽기 전용"으로 만들려면

[tableView setUserInteractionEnabled:NO];



5.셀을 강조 표시할지 여부를 즉시 결정하려면( 답변에 따라 선택 항목이 암시적으로 포함됨) 다음을 구현할 수 있습니다.UITableViewDelegate프로토콜 방법:

- (BOOL)tableView:(UITableView *)tableView 
   shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath

이를 구현한 경험을 바탕으로 올바른 답이 무엇이라고 생각해 보면 다음과 같습니다.

일부 셀만 선택하지 않으려면 다음을 사용합니다.

cell.userInteractionEnabled = NO;

선택을 금지할 뿐만 아니라 tableView:didSelectRowAtIndexPath: 설정된 셀에 대해 호출되는 것도 중지합니다. (이 답변에 대한 크레딧은 TonyMillion에게 전달됩니다, 감사합니다!)

셀에 클릭해야 하는 단추가 있는 경우 대신 다음 작업을 수행해야 합니다.

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

그리고 당신은 또한 셀을 클릭하는 것을 무시해야 합니다.- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath.

전체 테이블에 대한 선택을 비활성화하려면 다음을 사용합니다.

tableView.allowsSelection = NO;

(Paulo De Barros에게 감사합니다!)

6, iOS 6.0 버전UITableViewDelegate가지다tableView:shouldHighlightRowAtIndexPath:(iOS 설명서를 참조하십시오.)

이 스타일을 행을 표시할 수 수 하여 셀의 할 수 있습니다.userInteractionEnabled = NO또는 여기에 문서화된 다른 기술.

에서 행 .NoSelectionselection은 UITableViewProperties (UITableViewProperties)입니다.

UITableView 검사기

SWIFT 3을 위한 고정 솔루션

cell.selectionStyle = .none

편집: 최신 Swift의 경우 다음으로 변경됩니다.

cell.selectionStyle = .none

자세한 내용은 다음을 참조하십시오. https://developer.apple.com/documentation/uikit/uitableviewcell/selectionstyle

Swift에 대한 답변이 필요한 경우:

cell.selectionStyle = .None

의 신의에서.UITableViewCell의 속성 검사기 설정 값에 있는 의 XIBSelectionNone.

여기에 이미지 설명 입력

선택한 상태를 유지하지 않고 선택한 상태만 깜박이도록 하려면 다음을 호출할 수 있습니다.

didSelectRowAtIndexPath

이하의

[tableView deselectRowAtIndexPath:indexPath animated:YES];

그러면 선택한 상태가 깜박이고 되돌아갑니다.

UITableViewDelegate은 당신이 할 수 은 방을사 있로프입니다.willSelectRowAtIndexPath그리고.return nil행을 선택하지 않으려면 이 옵션을 선택합니다.

로 동한방로수사있다니습용할으식을 할 수 .willDeselectRowAtIndexPath 및 방법return nil행 선택을 취소하지 않으려면 이 옵션을 선택합니다.

이것이 제가 사용하는 것입니다.cellForRowAtIndexPath이 코드를 작성합니다.:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

1 - 다음 중 하나를 사용하여 인스턴스에서 선택 스타일을 설정하기만 하면 됩니다.


목표-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


}

목표-C:

  1. 아래 스니펫에서는 강조 표시를 사용하지 않지만 에 대한 호출도 사용하지 않습니다.didSelectRowAtIndexPath 만약 이 따서구지않경을우하를 실행하지 ,didSelectRowAtIndexPath그런 다음 아래 방법을 사용합니다.테이블을 작성할 때 추가해야 합니다.은 버튼 및 이은버과에서 합니다.UITextField하지만 감방 안에서.

    self.tableView.allowsSelection = NO;
    
  2. 아래 스니펫은 강조 표시를 비활성화하고 호출은 비활성화하지 않습니다.didSelectRowAtIndexPath을 "으로 합니다.cellForRowAtIndexPath

    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    
  3. 아래 스니펫은 셀의 모든 것을 비활성화합니다.이렇게 하면 에 대한 상호 작용이 비활성화됩니다.buttons,textfields:

    self.tableView.userInteractionEnabled = false;
    

스위프트:

다음은 다음과 같습니다.Swift위의 한 것Objective-C솔루션:

  1. 첫 번째 솔루션 교체

    self.tableView.allowsSelection = false
    
  2. 두 번째 솔루션 교체

    cell?.selectionStyle = UITableViewCellSelectionStyle.None
    
  3. 제3의 솔루션 교체

    self.tableView.userInteractionEnabled = false
    

스위프트 3, 4, 5

모범 사례: 코드 작성UITableViewCell

를 들어,, 당은신이 있습니다.UITableViewCell는라이로라는 MyCellawakeFromNib 냥그쓰라고 요.self.selectionStyle = .none

전체 예:

class MyCell: UITableViewCell {
    
    override func awakeFromNib() {
        super.awakeFromNib()
        self.selectionStyle = .none
    }
    
}

입력 시도:

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개.iib▁▁in▁'▁playing▁▁bottom▁theboardnon▁but▁managed스▁to▁make▁whenve▁it▁disappear▁you▁from▁selectionable한▁the▁ones▁tap,▁IBI는 아래쪽을 선택할 수 없도록 만들었지만, 탭하면 맨 위 행 중 하나에서 선택한 항목이 사라집니다.다음은 내 설정 UITableView의 WIP 이미지입니다.

설정 UI 테이블 보기

세 번째 행을 누르면 아무 일도 일어나지 않고 선택 항목은 두 번째 행에 유지됩니다.이 기능은 사실상 Apple 캘린더 앱의 이벤트 시간 추가 선택 화면의 복사본입니다.

코드는 놀라울 정도로 호환되며 IOS2 =/:

- (NSIndexPath *)tableView: (UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == 2) {
        return nil;
    }
    return indexPath;
}

이 기능은 선택 스타일을 없음으로 설정하는 것과 함께 작동하므로 터치다운 이벤트 시 셀이 깜박이지 않습니다.

다음과 같은 코드를 작성할 수 있습니다.

 cell.selectionStyle = UITableViewCellSelectionStyleNone;

하지만 우리가 라인 위에 커스텀xib가 있을 때 그 시간에 경고합니다.

사용자 지정 셀 xib

인터페이스 작성기에서 선택 스타일을 설정해야 합니다.

이 코드를 cellForRowAt에 넣으면 됩니다.인덱스 경로

셀의 선택 속성을 비활성화하려면 다음을 수행합니다.(셀을 탭하는 동안).

cell.selectionStyle = UITableViewCellSelectionStyle.None

UITableViewDataSource Protocol에서 내부 메서드cellForRowAt 추가: 메시지:

let cell = tableView.dequeueReusableCell(withIdentifier: "YOUR_CELL_IDENTIFIER", for: indexPath)                
cell.selectionStyle = .none
return cell

OR

Storyboard > Select Cell > Identity Inspector > Selection으로 이동하여 드롭다운에서 선택할 수 있습니다.

저는 이것을 사용하고 있는데, 이것은 저에게 효과가 있습니다.

cell?.selectionStyle = UITableViewCellSelectionStyle.None

이것을 먹어보세요.

cell.selectionStyle = UITableViewCellSelectionStyleNone;

그리고.

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

인터페이스 작성기를 사용하여 선택 스타일을 설정할 수도 있습니다.

스토리보드에서 TableViewCell 강조 표시를 직접 비활성화합니다.

여기에 이미지 설명 입력

이 방법은 선택 중 행에 강조 표시가 표시되지 않도록 하는 가장 좋고 쉬운 방법입니다.

cell.selectionStyle = UITableViewCellSelectionStyleNone;

또한 행이 선택되었음을 간단히 보여준 다음 해제하는 것이 유용할 수도 있습니다.그러면 사용자가 선택하려는 항목을 확인하는 메시지가 표시됩니다.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
     [tableView deselectRowAtIndexPath:indexPath animated:NO];
...
}

UI 테이블 보기 셀의 강조 표시를 비활성화하려면 다음과 같이 하십시오.

cell.selectionStyle = UITableViewCellSelectionStyleNone;

그리고 사용자가 셀과 상호작용하는 것을 허용해서는 안 됩니다.

cell.userInteractionEnabled = NO;

하여 Clear와 .UITableViewCellSelectionStyleNone하기 싫거나 수 없는 경우UITableViewCellSelectionStyleNone.

다음과 같은 코드를 사용합니다.

UIView *backgroundColorView = [[UIView alloc] init];
backgroundColorView.backgroundColor = [UIColor clearColor];
backgroundColorView.layer.masksToBounds = YES;
[cell setSelectedBackgroundView: backgroundColorView];

각 셀에 색상이 지정보기를 추가하면 성능이 저하될 수 있습니다.

cell.selectionStyle = UITableViewCellSelectionStyleNone;

스토리보드에서도 할 수 있습니다.표 보기 셀을 클릭하고 표 보기 셀 아래의 특성 검사기에서 선택 옆의 드롭다운을 없음으로 변경합니다.

다음을 사용할 수 있습니다.

cell.selectionStyle = UITableViewCellSelectionStyleNone;

셀에서 UITableView의 인덱스 경로 메소드에 대한 행을 표시합니다.

또한 다음을 사용할 수 있습니다.

[tableView deselectRowAtIndexPath:indexPath animated:NO];

테이블 보기에서 인덱스 경로 메서드를 선택했습니다.

UITableView에서 모든 UITableViewCell에 대한 선택을 비활성화합니다.

tableView.allowsSelection = false

특정 UITableViewCell에 대한 선택을 해제합니다.

cell.selectionStyle = UITableViewCell.SelectionStyle.none

언급URL : https://stackoverflow.com/questions/190908/how-can-i-disable-the-uitableview-selection

반응형