UITableView 셀이 색상을 선택 했습니까?


319

나는 custom을 만들었다 UITableViewCell. 테이블 뷰가 데이터를 잘 표시하고 있습니다. 내가 붙어있는 것은 사용자가 테이블 뷰의 셀을 만지면 셀 선택을 강조하기 위해 기본 [파란색] 값 이외의 셀의 배경색을 표시하고 싶습니다. 이 코드를 사용하지만 아무 일도 일어나지 않습니다.

cell.selectedBackgroundView.backgroundColor=[UIColor blackColor];

답변:


365

나는 당신이 올바른 길을 가고 있다고 생각하지만 클래스 정의에 따르면 selectedBackgroundView:

일반 스타일 테이블 (UITableViewStylePlain)의 셀은 기본값이 nil이고 섹션 그룹 ​​테이블은 UITableViewStyleGrouped가 아닌 경우 기본값이 0입니다.

따라서 일반 스타일 테이블을 사용하는 경우 UIView원하는 배경색을 가진 새 항목 을 할당 한 다음에 할당해야합니다 selectedBackgroundView.

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

cell.selectionStyle = UITableViewCellSelectionStyleGray;

셀을 선택할 때 원하는 모든 것이 회색 배경 인 경우 도움이 되었기를 바랍니다.


1
보기 관련 항목을보기에 두려면 스토리 보드에서이 속성을 설정할 수도 있습니다.
IIllIIll

1
Swift 3 version : cell.selectionStyle = .gray // 또한 .none, .blue 또는 .default를 사용할 수 있습니다
Sébastien REMY

6
이 답변은 꽤 오래되었습니다 ... 최신 iOS 버전에서 소싱이 변경 되었습니까? 일반 스타일 테이블이 있고 selectedBackgroundView가 0이 아닙니다. 이 뷰에서 backgroundColor를 흥미롭게 변경해도 아무런 효과가 없습니다. 대신 원하는 backgroundColor로 새 UIView로 바꾸어야 작동합니다.
ndreisg

당신은 나를 완전히 미쳐 버리지 못하게 막았습니다. 많은 감사합니다!
mrwheet

656

커스텀 셀이 필요 없습니다. 선택한 셀 색상 만 변경하려면 다음을 수행하십시오.

목표 -C :

UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor redColor];
[cell setSelectedBackgroundView:bgColorView];

빠른:

let bgColorView = UIView()
bgColorView.backgroundColor = UIColor.red
cell.selectedBackgroundView = bgColorView

47
이것은 작동하지만 그룹화 된 UITableView에서 둥근 모서리가 손실됩니다.
David

1
@David cornerRadius = 7은 그룹화 된 테이블보기의 어느 곳에서나 작동합니까? 세포가 중간에 있다면? 이것을 테스트 할 시간이 없습니다.
Maciej Swic

2
신속한 것은 작은 실수입니다. 올바른 줄은 cell.selectedBackgroundView = bgColorView
John Kakon 2012 년

13
이 기능이 작동하려면 스토리 보드 (또는 XIB 파일)에서 없음 이외의 선택된 배경색을 선택해야합니다. 이것은 먼저 작동하지 않으려면 None으로 설정해야한다는 일부 답변과 반대입니다. None을 사용하면 작동하지 않습니다. 내가 알아낼 때까지 나를 미치게했다. 감사.
kakubei

1
스토리 보드를 사용할 때 어떻게이 작업을 하시겠습니까?
John

42

테이블 뷰 셀 선택 배경색은 인터페이스 빌더의 스토리 보드를 통해 설정할 수 있습니다.

테이블 뷰 셀 선택 색상 없음


1
스토리 보드에서 사용자 정의 색상을 설정할 수 없다고 생각합니다. 프로그래밍 방식으로 설정해야합니다.
pallavi

37

섹션 당 하나의 셀만있는 그룹화 된 테이블이있는 경우 코드에 다음 행을 추가하십시오. bgColorView.layer.cornerRadius = 10;

UIView *bgColorView = [[UIView alloc] init];
[bgColorView setBackgroundColor:[UIColor redColor]];
bgColorView.layer.cornerRadius = 10;
[cell setSelectedBackgroundView:bgColorView];
[bgColorView release]; 

QuartzCore를 가져 오는 것을 잊지 마십시오.


28

스위프트 3 : 나를 위해 당신이 그것을 cellForRowAtIndexPath:방법에 넣을 때 효과가있었습니다.

let view = UIView()
view.backgroundColor = UIColor.red
cell.selectedBackgroundView = view

6
나는 이것을 넣는 더 좋은 곳은 awakeFromNib()방법 (맞춤형 셀의 경우) 이라고 생각한다 .
LembergSun

22

다음은 iOS 8에서 작동합니다.

UITableViewCellSelectionStyleDefault사용자 정의 배경색이 작동 하도록 선택 스타일을 설정 해야합니다. 다른 스타일이면 사용자 정의 배경색이 무시됩니다. 이전 답변이 스타일을 없음으로 설정해야하므로 동작에 변화가있는 것 같습니다.

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

- (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;
}

이 코드는 메모리 누수입니다. "alloc"또는 객체 생성은 if (cell == nil) {} 블록에 있어야합니다. 또는 셀이 iOS에서 릴리스 될 때마다보기가 작성됩니다.
유전자 코드

18

테이블 셀에 대한 사용자 정의 셀을 만들고 사용자 정의 셀 클래스에서 아래 코드를 입력하면 정상적으로 작동합니다. selectionBackgroundUIImage에 원하는 컬러 이미지를 배치해야합니다 .

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    UIImage *selectionBackground = [UIImage imageNamed:@"yellow_bar.png"];
    UIImageView *iview=[[UIImageView alloc] initWithImage:selectionBackground];
    self.selectedBackgroundView=iview;
}

2
하나의 셀을 선택할 때 bg보기 만 작성하여 셀을 초기화 할 때 selectedBackgroundView를 설정하는 것보다 메모리 효율이 더 좋을 수 있다고 생각합니다.
dotslashlu

11

스위프트 3.0 확장

extension UITableViewCell {
    var selectionColor: UIColor {
        set {
            let view = UIView()
            view.backgroundColor = newValue
            self.selectedBackgroundView = view
        }
        get {
            return self.selectedBackgroundView?.backgroundColor ?? UIColor.clear
        }
    }
}

cell.selectionColor = UIColor.FormaCar.blue


1
IBDesignable 및 IBInspectable 추가
Michał Ziobro

1
@ MichałZiobro는 @IBInspectable원하는 경우 var에 추가하십시오 . @IBDesignable이것에는 유용하지 않습니다.
Nik Kov

9
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIView *view = [[UIView alloc] init];
    [view setBackgroundColor:[UIColor redColor]];
    [cell setSelectedBackgroundView:view];
}

이 방법으로 선택한 배경보기를 설정해야합니다.


8

셀에 사용자 정의 강조 표시 된 색상을 추가하고 셀에 버튼, 레이블, 이미지 등이 포함되도록하려면 다음 단계를 수행하십시오.

예를 들어 선택한 노란색을 원하는 경우 :

1) backgroundselectedView와 같이 20 % 불투명도 (노란색)로 모든 셀에 맞는 뷰를 만듭니다.

2) 셀 컨트롤러에서 다음을 작성하십시오.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
     self.backgroundselectedView.alpha=1;
    [super touchesBegan:touches withEvent:event];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.backgroundselectedView.alpha=0;
    [super touchesEnded:touches withEvent:event];
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.backgroundSelectedImage.alpha=0;
    [super touchesCancelled:touches withEvent:event];
}

8

Swift 4에서는 표 셀의 배경색을 전체적으로 설정할 수 있습니다 ( 여기 에서 가져옴 ).

let backgroundColorView = UIView()
backgroundColorView.backgroundColor = UIColor.red
UITableViewCell.appearance().selectedBackgroundView = backgroundColorView

6

사용자 정의 TableViewCell을 사용하는 경우 다음을 무시할 수도 있습니다 awakeFromNib.

override func awakeFromNib() {
    super.awakeFromNib()

    // Set background color
    let view = UIView()
    view.backgroundColor = UIColor.redColor()
    selectedBackgroundView = view
}

1
좋은 해결책! 감사합니다
Thomás Calmon

10 셀을 넘지 않는 간단한 테이블 뷰를 가지고 있는데, 지금까지는 훌륭하게 작동합니다.
code4latte

5

그룹화 된 테이블의 둥근 모서리 배경을 표시하는 Christian의 방법에 대한 팁 하나 더.

cornerRadius = 10셀에 사용하면 네 모서리의 둥근 선택 배경이 표시됩니다. 테이블 뷰의 기본 UI와 동일하지 않습니다.

그래서 cornerRadius로 쉽게 해결할 수있는 방법에 대해 생각 합니다. 아래 코드에서 볼 수 있듯이 셀 위치 (위쪽, 아래쪽, 중간 또는 위쪽 아래쪽)를 확인하고 하나 이상의 하위 레이어를 추가하여 위쪽 또는 아래쪽 모서리를 숨 깁니다. 이것은 기본 테이블 뷰의 선택 배경과 정확히 동일한 모양을 보여줍니다.

이 코드를 iPad로 테스트했습니다 splitterview. 필요에 따라 patchLayer의 프레임 위치를 변경할 수 있습니다.

동일한 결과를 얻는 더 쉬운 방법이 있으면 알려주십시오.

if (tableView.style == UITableViewStyleGrouped) 
{
    if (indexPath.row == 0) 
    {
        cellPosition = CellGroupPositionAtTop;
    }    
    else 
    {
        cellPosition = CellGroupPositionAtMiddle;
    }

    NSInteger numberOfRows = [tableView numberOfRowsInSection:indexPath.section];
    if (indexPath.row == numberOfRows - 1) 
    {
        if (cellPosition == CellGroupPositionAtTop) 
        {
            cellPosition = CellGroupPositionAtTopAndBottom;
        } 
        else 
        {
            cellPosition = CellGroupPositionAtBottom;
        }
    }

    if (cellPosition != CellGroupPositionAtMiddle) 
    {
        bgColorView.layer.cornerRadius = 10;
        CALayer *patchLayer;
        if (cellPosition == CellGroupPositionAtTop) 
        {
            patchLayer = [CALayer layer];
            patchLayer.frame = CGRectMake(0, 10, 302, 35);
            patchLayer.backgroundColor = YOUR_BACKGROUND_COLOR;
            [bgColorView.layer addSublayer:patchLayer];
        } 
        else if (cellPosition == CellGroupPositionAtBottom) 
        {
            patchLayer = [CALayer layer];
            patchLayer.frame = CGRectMake(0, 0, 302, 35);
            patchLayer.backgroundColor = YOUR_BACKGROUND_COLOR;
            [bgColorView.layer addSublayer:patchLayer];
        }
    }
}

4

XIB 편집기는 다음과 같은 표준 옵션을 제공합니다.

섹션 : 파랑 / 회색 / 없음

(옵션이있는 오른쪽 열, 네 번째 탭, 첫 번째 그룹 "테이블보기 셀", 네 번째 하위 그룹, 세 항목 중 첫 번째 항목은 "선택"을 읽습니다)

올바른 표준 옵션을 선택하면 원하는 작업을 수행 할 수 있습니다.


네가 옳아. 따라서 그렇게하면 다음을 추가하여 "cellForRowAtIndexPath"에서 선택 색상을 간단하게 변경할 수 있습니다. UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier : @ "Cell"]; cell.selectedBackgroundView = [[UIView alloc] initWithFrame : CGRectZero]; cell.selectedBackgroundView.backgroundColor = [UIColor colorWithRed : (255/255) 녹색 : (0/255) 파랑 : (0/255) alpha : 0.1];
user8675

감사! 가는 길
Fattie

3

에서 선택한 셀의 사용자 정의 색상에 UITableView따라 Maciej Swic의 답변에 따라 훌륭한 솔루션

그것에 덧붙여서, 당신 은 일반적으로 아래의 셀 구성에서 Swic의 대답 을 선언합니다 :

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

또한 시스템 색상 대신 효과를 추가하려면 RGB 값을 사용하여 사용자 정의 색상 모양을 사용할 수 있습니다. 내 코드에서 이것은 내가 달성 한 방법입니다.

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

} 

 static NSString *CellIdentifier = @"YourCustomCellName";
 MakanTableCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

// Configure the cell...

if (cell == nil) {

cell = [[[NSBundle mainBundle]loadNibNamed:@"YourCustomCellClassName" owner:self options:nil]objectAtIndex:0];
                    } 

UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor colorWithRed:255.0/256.0 green:239.0/256.0 blue:49.0/256.0 alpha:1];
bgColorView.layer.cornerRadius = 7;
bgColorView.layer.masksToBounds = YES;
[cell setSelectedBackgroundView:bgColorView];


return cell;

}

그것이 당신에게도 효과가 있는지 알려주십시오. cornerRadius선택한 셀의 모서리에있는 효과 의 숫자를 엉망으로 만들 수 있습니다 .


3

나는 선택 후가 아니라 터치에 대한 선택을 반영하는 다른 모든 사람들과 약간 다른 접근 방식을 가지고 있습니다. 하위 클래스 UITableViewCell이 있습니다. 터치 이벤트에서 배경색을 설정하면 터치시 선택을 시뮬레이션 한 다음 setSelected 함수에서 배경색을 설정하기 만하면됩니다. selSelected 함수에서 배경색을 설정하면 셀 선택을 해제 할 수 있습니다. 터치 이벤트를 수퍼에 전달하십시오. 그렇지 않으면 셀이 실제로 선택된 것처럼 작동하지 않습니다.

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    self.backgroundColor = UIColor(white: 0.0, alpha: 0.1)
    super.touchesBegan(touches, withEvent: event)
}

override func touchesCancelled(touches: NSSet!, withEvent event: UIEvent!) {
    self.backgroundColor = UIColor.clearColor()
    super.touchesCancelled(touches, withEvent: event)
}

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

    // Configure the view for the selected state
    self.backgroundColor = selected ? UIColor(white: 0.0, alpha: 0.1) : UIColor.clearColor()
}

3

모든 셀의 배경을 추가하려면 (Maciej의 답변 사용) :

for (int section = 0; section < [self.tableView numberOfSections]; section++) {
        for (int row = 0; row < [self.tableView numberOfRowsInSection:section]; row++) {
            NSIndexPath* cellPath = [NSIndexPath indexPathForRow:row inSection:section];
            UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:cellPath];

            //stuff to do with each cell
            UIView *bgColorView = [[UIView alloc] init];
            bgColorView.backgroundColor = [UIColor redColor];
            [cell setSelectedBackgroundView:bgColorView];
        }
    } 

2

오버라이드 (override) UITableViewCellsetSelected도 작동합니다.

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

    // Set background color
    let view = UIView()
    view.backgroundColor = UIColor.redColor()
    selectedBackgroundView = view
}

2

기본적으로 선택된 회색 배경을 없애고 싶다면 다음 코드 줄을 cellForRowAtIndexPath func에 넣으십시오.

yourCell.selectionStyle = .None

1
고마워요, 이것은 다른 사람들이 아닌 나에게 정답입니다.
DeyaEldeen

none 또는 blue 또는 grey를 설정하는 대신 "green"과 같은 색상을 설정하는 방법
Satyam

2

스위프트 3.0 :

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let cell = super.tableView(tableView, cellForRowAt: indexPath)

    cell.contentView.backgroundColor = UIColor.red
}

니스는하지만, (시작 유지됩니다 기본 선택 색상) 사용자 만 선택 일 후 작동합니다
콘스탄틴 Salavatov에게

2

나는 아래의 접근법을 사용하고 나를 위해 잘 작동합니다.

class MyTableViewCell : UITableViewCell {

                var defaultStateColor:UIColor?
                var hitStateColor:UIColor?

                 override func awakeFromNib(){
                     super.awakeFromNib()
                     self.selectionStyle = .None
                 }

// if you are overriding init you should set selectionStyle = .None

                override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
                    if let hitColor = hitStateColor {
                        self.contentView.backgroundColor = hitColor
                    }
                }

                override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
                    if let defaultColor = defaultStateColor {
                        self.contentView.backgroundColor = defaultColor
                    }
                }

                override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?) {
                    if let defaultColor = defaultStateColor {
                        self.contentView.backgroundColor = defaultColor
                    }
                }
            }

2

스위프트 4+ :

표 셀 에 다음 줄 추가

let bgColorView = UIView()
bgColorView.backgroundColor =  .red
self.selectedBackgroundView = bgColorView

마지막으로 아래와 같이되어야합니다

override func setSelected(_ selected: Bool, animated: Bool)
    {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
        let bgColorView = UIView()
        bgColorView.backgroundColor =  .red
        self.selectedBackgroundView = bgColorView

    }

1

다음은 그룹화 된 테이블에 필요한 코드의 중요한 부분입니다. 섹션의 셀 중 하나를 선택하면 첫 번째 행의 색상이 변경됩니다. cellselectionstyle을 none으로 처음 설정하지 않으면 사용자가 row0을 클릭하면 셀이 bgColorView로 변경되고 bgColorView가 다시 사라지고 다시로드됩니다. 행운을 빕니다. 간단한 방법이 있는지 알려주세요.

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    if ([indexPath row] == 0) 
    {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        UIView *bgColorView = [[UIView alloc] init];
        bgColorView.layer.cornerRadius = 7;
        bgColorView.layer.masksToBounds = YES;
        [bgColorView setBackgroundColor:[UIColor colorWithRed:.85 green:0 blue:0 alpha:1]];
        [cell setSelectedBackgroundView:bgColorView];

        UIColor *backColor = [UIColor colorWithRed:0 green:0 blue:1 alpha:1];
        cell.backgroundColor = backColor;
        UIColor *foreColor = [UIColor colorWithWhite:1 alpha:1];
        cell.textLabel.textColor = foreColor;

        cell.textLabel.text = @"row0";
    }
    else if ([indexPath row] == 1) 
    {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        UIColor *backColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
        cell.backgroundColor = backColor;
        UIColor *foreColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
        cell.textLabel.textColor = foreColor;

        cell.textLabel.text = @"row1";
    }
    else if ([indexPath row] == 2) 
    {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        UIColor *backColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
        cell.backgroundColor = backColor;
        UIColor *foreColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
        cell.textLabel.textColor = foreColor;

        cell.textLabel.text = @"row2";
    }
    return cell;
}

#pragma mark Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSIndexPath *path = [NSIndexPath indexPathForRow:0 inSection:[indexPath section]];
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:path];
    [cell setSelectionStyle:UITableViewCellSelectionStyleBlue];

    [tableView selectRowAtIndexPath:path animated:YES scrollPosition:UITableViewScrollPositionNone];

}

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tvStat cellForRowAtIndexPath:indexPath];
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
}

#pragma mark Table view Gestures

-(IBAction)singleTapFrom:(UIGestureRecognizer *)tapRecog
{

    CGPoint tapLoc = [tapRecog locationInView:tvStat];
    NSIndexPath *tapPath = [tvStat indexPathForRowAtPoint:tapLoc];

    NSIndexPath *seleRow = [tvStat indexPathForSelectedRow];
    if([seleRow section] != [tapPath section])
        [self tableView:tvStat didDeselectRowAtIndexPath:seleRow];
    else if (seleRow == nil )
        {}
    else if([seleRow section] == [tapPath section] || [seleRow length] != 0)
        return;

    if(!tapPath)
        [self.view endEditing:YES];

    [self tableView:tvStat didSelectRowAtIndexPath:tapPath];
}

1

사용자 정의 셀 클래스의 경우. 무시하십시오.

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state

    if (selected) {
        [self setBackgroundColor: CELL_SELECTED_BG_COLOR];
        [self.contentView setBackgroundColor: CELL_SELECTED_BG_COLOR];
    }else{
        [self setBackgroundColor: [UIColor clearColor]];
        [self.contentView setBackgroundColor: [UIColor clearColor]];
    }
}

0

테이블 뷰 스타일이 평범한 경우 쉽지만 그룹 스타일에서는 약간 문제가 있습니다.

CGFloat cellHeight = [self tableView:tableView heightForRowAtIndexPath:indexPath];
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kGroupTableViewCellWidth+2, cellHeight)];
view.backgroundColor = kCommonHighlightedColor;
cell.selectedBackgroundView = view;
[view release];
UIRectCorner cornerFlag = 0;
CGSize radii = CGSizeMake(0, 0);
NSInteger theLastRow = --> (yourDataSourceArray.count - 1);
if (indexPath.row == 0) {
    cornerFlag = UIRectCornerTopLeft | UIRectCornerTopRight;
    radii = CGSizeMake(10, 10);
} else if (indexPath.row == theLastRow) {
    cornerFlag = UIRectCornerBottomLeft | UIRectCornerBottomRight;
    radii = CGSizeMake(10, 10);
}
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:cornerFlag cornerRadii:radii];
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.path = maskPath.CGPath;
view.layer.mask = shapeLayer;

kGroupTableViewCellWidth를 지적하고 300으로 정의합니다 .iPhone의 그룹 테이블보기 셀 너비의 너비입니다.


0
[cell setSelectionStyle:UITableViewCellSelectionStyleGray];

선택 효과를 사용하기 위해 위의 줄을 사용했는지 확인하십시오


0
override func setSelected(selected: Bool, animated: Bool) {
    // Configure the view for the selected state

    super.setSelected(selected, animated: animated)
    let selView = UIView()

    selView.backgroundColor = UIColor( red: 5/255, green: 159/255, blue:223/255, alpha: 1.0 )
    self.selectedBackgroundView = selView
}

미래의 모든 독자들이 읽을 수 있도록 답에 대한 설명을 추가하십시오
techspider

0

iOS 9.3을 사용하고 스토리 보드 또는 설정을 통해 색상을 설정해 cell.selectionStyle도 효과가 없었지만 아래 코드는 작동했습니다.

UIView *customColorView = [[UIView alloc] init];
customColorView.backgroundColor = [UIColor colorWithRed:55 / 255.0 
                                                  green:141 / 255.0 
                                                   blue:211 / 255.0 
                                                  alpha:1.0];
cell.selectedBackgroundView = customColorView;

return cell;

이 솔루션을 여기 에서 찾았 습니다 .


0

다음 코드를 시도하십시오.

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:[cellIdArray objectAtIndex:indexPath.row] forIndexPath:indexPath];

    // Configure the cell...
    cell.backgroundView =
    [[UIImageView alloc] init] ;
    cell.selectedBackgroundView =[[UIImageView alloc] init];

    UIImage *rowBackground;
    UIImage *selectionBackground;


    rowBackground = [UIImage imageNamed:@"cellBackgroundDarkGrey.png"];
    selectionBackground = [UIImage imageNamed:@"selectedMenu.png"];

    ((UIImageView *)cell.backgroundView).image = rowBackground;
    ((UIImageView *)cell.selectedBackgroundView).image = selectionBackground;



    return cell;
}

// 빠른 버전 :

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        let cell = tableView.dequeueReusableCell(withIdentifier: "cell")! as UITableViewCell


        cell.selectedBackgroundView = UIImageView()
        cell.backgroundView=UIImageView()

        let selectedBackground : UIImageView = cell.selectedBackgroundView as! UIImageView
        selectedBackground.image = UIImage.init(named:"selected.png");

        let backGround : UIImageView = cell.backgroundView as! UIImageView
        backGround.image = UIImage.init(named:"defaultimage.png");

        return cell


    } 

0

스위프트 4.x

선택 배경색을 anyColour로 변경하려면 Swift Extension을 사용하십시오.

아래와 같이 UITableView 셀 확장 만들기

extension UITableViewCell{

    func removeCellSelectionColour(){
        let clearView = UIView()
        clearView.backgroundColor = UIColor.clear
        UITableViewCell.appearance().selectedBackgroundView = clearView
    } 

}

그런 다음 셀 인스턴스로 removeCellSelectionColour () 를 호출 하십시오 .

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