[ios] 사용자 정의 UITableViewCell 선택 스타일?

UITableViewCell클릭하면 셀을 클릭하면 배경 부분 (내 배경 이미지가 덮지 않는 영역)이 파란색으로 바뀝니다. 또한 UILabel클릭하면 셀의 모든 s가 흰색으로 바뀝니다.

그러나 내가 원하지 않는 것은 클릭했을 때 파란색 배경이지만 클릭 하면 셀 selectionstylenoneUILabels에 대해 강조 표시된 색상이 손실됩니다 .

그렇다면 셀을 클릭 할 때 파란색 배경을 제거하고 UILabels 의 강조 표시된 색상을 유지하는 방법이 있습니까?



답변

다음과 같이 할 수 있습니다. 표 셀의 선택 스타일을 UITableViewCellSelectionStyleNone. 파란색 배경 강조 표시가 제거됩니다. 그런 다음 기본 UITableViewCell 클래스를 사용하는 대신 텍스트 레이블 강조 표시가 원하는 방식으로 작동하도록하려면의 하위 클래스를 만들고 강조 표시된 상태에 따라 원하는대로 레이블 색상을 설정하는 자체 구현 UITableViewCell으로의 기본 구현을 재정의합니다. setHighlighted:animated.

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{
    if (highlighted) {
        self.textLabel.textColor = [UIColor whiteColor];
    } else {
        self.textLabel.textColor = [UIColor blackColor];
    }
}


답변

iOS7 이전에 작업하는 경우 셀 선택 스타일을 없음으로 설정하십시오.

cell.selectionStyle = UITableViewCellSelectionStyleNone;

그렇지 않으면 그대로 두십시오. UITableViewCellSelectionStyleDefault

그때:

UIView *selectedView = [[UIView alloc]init];
selectedView.backgroundColor = [UIColor redColor];
cell.selectedBackgroundView =  selectedView;

이 코드는 제대로 작동합니다.


답변

선택 스타일을 없음으로 설정 한 후 다음 대리자 메서드를 사용할 수 있습니다.

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath

여기에 다음과 같이 코드를 구현하십시오.

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    CustomCell *cell = (CustomCell *)[tableView cellForRowAtIndexPath:indexPath];
    [cell.lbls setTextColor:[UIColor whiteColor]];
    return indexPath;
}


답변

이 작업을 수행하려면 선택 스타일을로 설정 UITableViewCellSelectionStyleNone한 다음 setSelected:animated:원하는 결과를 얻기 위해 메서드 를 재정의해야합니다 . 파란색 (또는 회색) 선택을 볼 때 iOS의 자동 선택 메커니즘이 수행하는 것과 동일한 작업을 수행합니다.

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    if (selected) {
        self.textLabel.textColor = [UIColor whiteColor];
    } else {
        self.textLabel.textColor = [UIColor blackColor];
    }
}

UITableViewCell 배경을 변경하는 등 다른 방법으로이를 사용자 정의 할 수도 있습니다.


답변

cellForRowAtIndexPath에서 다음 코드를 사용하십시오.

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

[cell.myLabel setHighlightedTextColor: [UIColor whiteColor]]; // for all your labels

이것이 당신을 위해 일하기를 바랍니다.

코딩 즐기기 🙂


답변

의 하위 클래스에서 다음 함수를 재정의합니다 UITableViewCell.

override func setHighlighted(highlighted: Bool, animated: Bool) { }
override func setSelected(selected: Bool, animated: Bool) { }


답변

표준 선택 스타일 동작을 일치시키기 위해 setHighlighted:animated:setSelected:animated:. 중복 코드를 피하기 위해 해당 코드를 공유 메서드로 옮기고 싶을 것입니다.

override func setHighlighted(highlighted: Bool, animated: Bool) {

    setAsSelectedOrHighlighted(highlighted, animated: animated)
    super.setHighlighted(highlighted, animated: animated)
}

override func setSelected(selected: Bool, animated: Bool) {

    setAsSelectedOrHighlighted(selected, animated: animated)
    super.setSelected(selected, animated: animated)
}

func setAsSelectedOrHighlighted(selectedOrHighlighted: Bool, animated: Bool) {

    let action = {
        // Set animatable properties
    }

    if animated {
        UIView.animateWithDuration(1.0, delay: 0, options: .CurveEaseInOut, animations: action, completion: nil)
    }
    else {
        action()
    }
}