UITableViewCell의 파란색 강조 표시 색상을 변경하는 방법은 무엇입니까?


131

UITableViewCell아이디어 의 파란색 강조 / 선택 색상을 변경하는 방법이 궁금합니다 .

답변:


213

여러 가지 방법으로 하이라이트 색상을 변경할 수 있습니다.

  1. 셀의 selectionStyle 속성을 변경하십시오. 로 변경하면 UITableViewCellSelectionStyleGray회색으로 표시됩니다.

  2. selectedBackgroundView속성을 변경하십시오 . 실제로 파란색 그라디언트를 만드는 것은보기입니다. 뷰를 생성하고 원하는 것을 그릴 수 있으며 뷰를 테이블 뷰 셀의 배경으로 사용할 수 있습니다.


8
cool, 여기에 좋은 설명과 예제가 있습니다 : cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html
— Thomas Joos

1
IB에서는 UITableViewCell "Selection"을 "None"으로 설정할 수 없다는 것을 깨달았 selectedBackgroundView습니다. 왜냐하면 평범하지 않을 것입니다. "선택"을 기본값으로 설정 한 후에 만 selectedBackgroundView표시됩니다. iOS 6 및 7에서 테스트되었습니다.
— Jonny

12
참고해 주셔서 감사합니다! 이렇게하면 이제 간단 해집니다. 새보기를 만들거나 (프레임을 지정할 필요가 없습니다.) cell.selectedBackgroundView = [UIView new];원하는 색상을 설정하십시오.cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHex:@"ecf2f5" andAlpha:1];
— Dannie P

이 페이지의 하단을 보면, 최근 접근 방식이 있습니다
— Climbatize

145

Zonble은 이미 훌륭한 답변을 제공했습니다. UIView선택한 배경보기로 표시되는 테이블 뷰 셀에 a 를 추가하기 위해 짧은 코드 스 니펫을 포함하는 것이 유용 할 수 있다고 생각했습니다 .

cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

    UIView *selectionColor = [[UIView alloc] init];
    selectionColor.backgroundColor = [UIColor colorWithRed:(245/255.0) green:(245/255.0) blue:(245/255.0) alpha:1];
    cell.selectedBackgroundView = selectionColor;
  • 세포는 나의 UITableViewCell
  • UIView를 만들고 RGB 색상 (밝은 회색)을 사용하여 배경색을 설정했습니다.
  • 그런 다음 셀 selectedBackgroundView을 UIView선택한 배경색으로 만든 셀로 설정했습니다.

이것은 나를 위해 잘 작동했습니다. Zonble 팁을 주셔서 감사합니다.


2
섹션이 포함 된 테이블 뷰를 사용할 때는이 기능이 제대로 작동하지 않습니다. 선택하면 셀의 경계가 사라지고 첫 번째 또는 마지막 셀일 때 반올림되지 않습니다.
— 커크 울

7
@kirk, 당신은 그룹화되는 것을 의미합니다 :)
— Tieme

@Tieme, 아니오, 섹션을 의미 합니다 . "테이블보기는 각각 자체 행이있는 0 개 이상의 섹션으로 구성됩니다."
— Kirk Woll

'cellForRowAtIndexPath'내에 배치해야합니다. 한 섹션으로 나에게 잘 작동합니다. 여러 섹션으로 시도하지 않았습니다.
— Vincent

게임에 조금 늦었지만 여러 섹션으로
— 구성된 테이블 뷰

30

UITableViewCell 세 가지 기본 선택 스타일이 있습니다 :-

  1. 푸른
  2. 회색
  3. 없음

구현은 다음과 같습니다 :-

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

     [cell setSelectionStyle:UITableViewCellSelectionStyleNone];       
}

7
이 세 가지 기본 스타일 대신 selectedBackgroundView 속성으로 예상 스타일을 사용자 지정할 수도 있습니다.
— Sunil Targe

나를 위해 일했다 ... 고마워요.
— Mujeeb Farooqi

19

Swift에서 이것을 사용하십시오. cellForRowAtIndexPath

let selectedView = UIView()
selectedView.backgroundColor = .white
cell.selectedBackgroundView = selectedView

선택 색상을 모두 동일하게하려면에서 UITableViewCell사용하십시오 AppDelegate.

let selectedView = UIView()
selectedView.backgroundColor = .white
UITableViewCell.appearance().selectedBackgroundView = selectedView

18

앱 전체를 변경하려는 경우 앱 위임에 로직을 추가 할 수 있습니다.

class AppDelegate: UIResponder, UIApplicationDelegate {

    //... truncated

   func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {

        // set up your background color view
        let colorView = UIView()
        colorView.backgroundColor = UIColor.yellowColor()

        // use UITableViewCell.appearance() to configure 
        // the default appearance of all UITableViewCells in your app
        UITableViewCell.appearance().selectedBackgroundView = colorView

        return true
    }

    //... truncated
}

완전한. 선택시 해당 기본 셀의 텍스트 색상을 전역 적으로 설정하는 방법에 대한 아이디어가 있습니까?
— BananaAcid

1
이것은 작동하지만 새 뷰 컨트롤러를 누르면 선택 항목이 직접 지워집니다.
— bobmoff

UITableViewCell에 대한 전체 변경을 수행하는 좋은 방법
— Shashi3456643

12

완전성을 위해 : 자신의 하위 클래스를 만든 경우 메소드를 UITableViewCell구현 - (void)setSelected:(BOOL)selected animated:(BOOL)animated하고 컨텐츠보기에 추가 한 일부보기의 배경색을 설정할 수 있습니다. (이 경우) 또는 contentView 자체 (자체보기 중 하나에 포함되지 않은 경우)

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    if(selected) {
        self.contentView.backgroundColor = UIColor.blueColor;
    } else {
        self.contentView.backgroundColor = UIColor.whiteColor;
    }
}

(소스 코드 DIV의 작은 너비에 맞추기 위해?를 사용하지 않았습니다.)

이 접근법은 selectedBackgroundView를 사용하는 것보다 두 가지 장점이 있습니다. 메모리가 적고 CPU가 약간 적기 때문에 수백 개의 셀을 표시하지 않으면 눈치 채지 못할 것입니다.


이것은 새로운 뷰가 selectedBackgroundView add 메소드의 맨 처음에 할당 된 후에 만 ​​작동 합니다.self. selectedBackgroundView = [UIView new];
— enadun

@enadun이 방법은 selectedBackgroundView속성을 설정하지 않고 iOS 12에서 작동 합니다.
— Nate

11

UITableViewCellSelectionStyleDefault사용자 정의 배경색이 작동 하도록 선택 스타일을 설정 해야합니다. 다른 스타일이면 사용자 정의 배경색이 무시됩니다. iOS 8에서 테스트되었습니다.

셀의 전체 코드는 다음과 같습니다.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"MyCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    // This is how you change the background color
    cell.selectionStyle = UITableViewCellSelectionStyleDefault;
    UIView *bgColorView = [[UIView alloc] init];
    bgColorView.backgroundColor = [UIColor redColor];
    [cell setSelectedBackgroundView:bgColorView];

    return cell;
}

6

를 기반으로 @ 사용자의 대답 , 당신은 당신의 응용 프로그램 코드에서이 확장 어느 곳을 추가 할 수 있으며 앱의 모든 세포에 대한 스토리 보드 편집기에서 직접 선택 색상을 가지고 :

@IBDesignable extension UITableViewCell {
    @IBInspectable var selectedColor: UIColor? {
        set {
            if let color = newValue {
                selectedBackgroundView = UIView()
                selectedBackgroundView!.backgroundColor = color
            } else {
                selectedBackgroundView = nil
            }
        }
        get {
            return selectedBackgroundView?.backgroundColor
        }
    }
}

스토리 보드의 UITableViewCell 선택 색상


5
@IBDesignable class UIDesignableTableViewCell: UITableViewCell {
  @IBInspectable var selectedColor: UIColor = UIColor.clearColor() {
    didSet {
      selectedBackgroundView = UIView()
      selectedBackgroundView?.backgroundColor = selectedColor
    }
  }
}

스토리 보드에서 UITableViewCell 클래스를 UIDesignableTableViewCell로 설정하고 속성 관리자에서 선택한 셀 색상을 원하는 색상으로 변경할 수 있습니다.

모든 셀에 사용할 수 있습니다. 이것이 속성 관리자의 모습입니다.

이것이 속성 관리자의 모습입니다


아주 창의적인! 큰!
— Kaushil Ruparelia

더 간단하게 만들 수 있습니다. 내 대답을보십시오.) stackoverflow.com/a/51764804/537694
— Climbatize

맞춤 셀을 사용하여 레이블을 설정하므로 감사합니다. Swift 5의 변경 사항 : 지금 UIColor.clear은 아닙니다 UIColor.clearColor(). 그것이 Swift의 변경 사항인지 확실하지 않지만, 없이도 작동합니다 @IBDesignable.
— Neph

5

스위프트 3.0 / 4.0

고유 한 사용자 정의 셀을 만든 경우 awakeFromNib()모든 셀 의 선택 색상을 변경할 수 있습니다 .

 override func awakeFromNib() {
    super.awakeFromNib()

    let colorView = UIView()
    colorView.backgroundColor = UIColor.orange.withAlphaComponent(0.4)

    self.selectedBackgroundView = colorView


}

0

1- 셀의 컨텐츠보기에보기를 추가하십시오.
2- 셀을 마우스 오른쪽 버튼으로 클릭하십시오.
3- 추가 된 뷰를 "selectedBackgroundView"로 설정 여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.