如何更改UITableViewCell的蓝色突出显示颜色?


Answers:


213

您可以通过多种方式更改突出显示颜色。

  1. 更改单元格的selectionStyle属性。如果将其更改为UITableViewCellSelectionStyleGray,它将为灰色。

  2. 更改selectedBackgroundView属性。实际上,创建蓝色渐变的是一个视图。您可以创建视图并绘制所需的内容,并将该视图用作表格视图单元格的背景。


8
很酷,在这里找到了很好的解释和例子:cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html
Thomas Joos 2010年

1
我意识到,在IB中,您无法将UITableViewCell的“选择”设置为“无”,因为selectedBackgroundView那样就不会显示出来。仅在将“选择”设置为“默认”后,才会selectedBackgroundView显示。经测试在iOS 6和7
强尼

12
感谢您的来信!现在,它变得如此简单:您创建一个新视图(甚至无需指定框架:cell.selectedBackgroundView = [UIView new];并设置所需的任何颜色:cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHex:@"ecf2f5" andAlpha:1];
Dannie P 2014年

请看本页底部,还有更多最新的方法
Climbatize

145

Zonble已经提供了一个很好的答案。我认为,包括一个简短的代码段以将a添加UIView到将作为所选背景视图呈现的tableview单元中,可能会很有用。

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
当将表视图与节一起使用时,这不太好用。选中后,该单元格将失去边界,并且在第一个或最后一个单元格时不会四舍五入。
Kirk Woll

7
@kirk,您的意思是分组的:)
Tieme

@Tieme,不,我的意思是:“表视图由零个或多个节组成,每个节都有自己的行。”
Kirk Woll

您必须将其放置在“ cellForRowAtIndexPath”中。一节对我来说很好用。没有尝试与多个部分。
文森特

游戏有点晚了,但是我可以确认它可以在具有多个部分的
表格视图中工作

30

UITableViewCell 具有三种默认选择样式:-

  1. 蓝色
  2. 灰色
  3. 没有

实现如下:

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

     [cell setSelectionStyle:UITableViewCellSelectionStyleNone];       
}

7
除了这三种默认样式,我们还可以通过selectedBackgroundView属性为期望的样式自定义。
Sunil Targe 2012年

为我工作...非常感谢。
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 2015年

1
这可行,但是当按下新的视图控制器时,选择将直接清除。
bobmoff 2015年

对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 方法之后,此方法才有效。在方法的开头添加self. selectedBackgroundView = [UIView new];
enadun

@enadun此方法在iOS 12上对我有效,根本没有设置该selectedBackgroundView属性。
内特

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

根据@user的回答,您可以将此扩展名添加到应用程序代码中的任何位置,并直接在故事板编辑器中为应用程序的每个单元格选择颜色:

@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” 在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.