programing

UITableView 일부 셀을 "선택할 수 없음"으로 설정

testmans 2023. 7. 4. 21:45
반응형

UITableView 일부 셀을 "선택할 수 없음"으로 설정

UITableView의 셀 속성을 선택할 수 없도록 설정하려면 어떻게 해야 합니까?사용자가 셀을 누를 때 파란색 선택 상자가 표시되지 않습니다.

행 선택을 방지하려면

선택을 완전히 방지합니다.UITableViewCell마음대로 하세요UITableViewDelegate구현. 그 방법에서 당신은 돌아올 수 있습니다.nil행을 선택하지 않으려는 경우.

- (NSIndexPath *)tableView:(UITableView *)tv willSelectRowAtIndexPath:(NSIndexPath *)path
{
    // Determine if row is selectable based on the NSIndexPath.

    if (rowIsSelectable) {
        return path;
    }
    return nil;
}

이렇게 하면 행을 선택하거나 호출할 수 없습니다.그러나 이렇게 해도 행이 강조 표시되는 것을 방지할 수 없습니다.

행 강조 표시를 방지하려면

터치 시 행이 시각적으로 강조 표시되지 않도록 하려면 셀이 다음과 같이 설정되도록 할 수 있습니다.UITableViewCellSelectionStyleNone아니면 가급적이면 당신은 당신의 것을 가질 수 있습니다.UITableViewDelegate다음과 같이 구현:

- (BOOL)tableView:(UITableView *)tv shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Determine if row is selectable based on the NSIndexPath.

    return rowIsSelectable;
}

테이블 셀 설정selectionStyle에 대한 재산.UITableViewCellSelectionStyleNone그러면 강조 표시되지 않을 것이며, 또한 당신은 당신의 웹사이트에서 해당 속성을 확인할 수 있습니다.tableView:didSelectRowAtIndexPath:.

사용:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

iOS 6+ 전용입니다.

방법을 구현할 수 있습니다.tableView:shouldHighlightRowAtIndexPath:당신의 대리인 안에.자세한 내용은 여기를 참조하십시오. http://developer.apple.com/library/ios/ #documentation/uikit/reference/UITableViewDelegate_Protocol/Reference.html

이 문제 또한 이미 언급된 모든 것을 시도했습니다.테이블 셀을 선택할 때 "파란 섬광"을 제거한 마지막 방법은 다음 행을 추가하는 것이었습니다.

self.myTableView.allowsSelection = NO;

이것이 한 줄로 된 것인지 아니면 모든 것이 합쳐진 것인지 확실하지 않지만, 전체적인 결과로서 저는 더 이상 파란색 선택 항목이나 파란색 플래시조차 얻지 못합니다.행복합니다!

세트cell.userInteractionEnabled = NO;

IB를 사용하는 것도 좋은 방법입니다.

enter image description here

Apple에서 가장 먼저 수행해야 할 작업이 SelectRowAt였다고 합니다.IndexPath는 행 선택을 취소합니다.

[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:NO];

그런 다음 액세서리를 변경할 수 있습니다.체크 표시 또는 없음 등을 입력합니다.그래서 입력할 때 SelectRowAt를 선택했습니다.IndexPath 행을 선택 취소할 수 있으며, 선택할 의도가 아니라면 해당 행을 선택하지 마십시오.

테이블 보기 프로그래밍 가이드

또 다른 방법은 다음에 몇 가지 범주 방법을 추가하는 것입니다.UITableViewCell저는 세바스티안보다 이것이 더 좋습니다. 왜냐하면 제가 테이블을 만드는 방식이기 때문입니다.다른 사람에게 도움이 될 거라고 생각했어요.

- (void)setSelectable:(BOOL)enabled {
    [self setSelectionStyle:UITableViewCellSelectionStyleNone];
    [self setUserInteractionEnabled:enabled];
}

- (BOOL)isSelectable {
    BOOL disabled = [self selectionStyle]==UITableViewCellSelectionStyleNone &&
                     [self isUserInteractionEnabled];
    return ! disabled;
}

스위프트 4:
UITableViewDelegate: shouldHighlightRowAt를 사용하여 선택 및 강조 표시를 방지할 수 있습니다.

이 답변에서는 다음 이름의 사용자 지정 셀이 생성되었다고 가정합니다.사용자 지정 테이블 보기 셀
사용자 지정 셀 내부에 다음과 같은 부울을 작성한 경우: isSelectable

func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool {
    let cell = tableView.cellForRow(at: indexPath) as! CustomTableViewCell
    if cell.isSelectable == false {
        return false
    } else {
        return true
    }
}

이것은 세바스찬 셀리스의 objc 답변의 스위프트 버전입니다.

스위프트 5

cell.isUserInteractionEnabled = false

Interface Builder에서 셀을 설계한 경우 '사용자 상호 작용 활성화'에서 확인란을 제거하여 이 작업을 수행할 수 있습니다.tableViewCell.

선택 항목이 파란색으로 표시되지 않도록 하는 또 다른 간단한 방법이 있습니다.

파란색으로 표시하지 않을 셀을 선택합니다.

그런 다음 특성 검사기(측면의 특성 보기에서 눈금자 아이콘 옆에 있는 방패 아이콘)를 선택합니다.

그런 다음 '선택' 필드를 '파란색'에서 '없음'으로 변경합니다.

참고로, 이것은 여전히 선택 중인 것으로 보이며, UI 효과를 피하기만 하면 선택된 것으로 나타나지 않습니다.

테이블 뷰: willDisplayCell: for RowAtIndexPath: tableView 대신: didSelectRowAtIndexPath: 셀을 처음 터치할 때 나타나는 플래시를 제거합니다.

- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
}

특정 행을 선택 취소하려면 UITableView 대리자의 두 가지 방법을 변경해야 합니다.

아래 방법으로

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

셀을 할당한 후 아래 코드를 작성합니다.

if(indexPath.row == someCellNumber) cell.selectionStyle =UITableViewCellSelectionStyleNone;

위의 코드는 사용자가 선택하려고 할 경우 셀 강조 표시를 방지합니다.

아래의 이 대리인 방법으로

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    if(indexPath.row == someCellNumber) return;

    //for other cells write the code below...
}

당신이 않는쓰지를을 쓰지 if(indexPath.row == someCellNumber) return;.

스위프트 4:

셀 클래스에서:

selectionStyle = .none

언급URL : https://stackoverflow.com/questions/812426/uitableview-setting-some-cells-as-unselectable

반응형