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 색상 (밝은 회색)을 사용하여 배경색을 설정했습니다.
  • 그런 다음 셀 selectedBackgroundViewUIView선택한 배경색으로 만든 셀로 설정했습니다.

이것은 나를 위해 잘 작동했습니다. 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.