11

我已经阅读了有关该主题的多个问答,但似乎没有一个有效,所以这是我的问题。

我创建了一个自定义 UITableViewCell 并在 Storyboard 中,我要求有一个披露指示器附件。据说 tintColor 应该改变指示器的颜色,但经过大量研究,我发现了以下内容:

  • 单元格的 accessoryView 映射为 nil 值,因此我不能影响它的 tintColor

我尝试使用 selectedBackgroundView 来创建附件视图,如下所示:

self.accessoryView = UIView()

显然,它只是创建了一个空白区域,并且原始的披露附件消失了。我真的对这一切感到困惑,找不到影响细胞配件颜色的方法。非常欢迎任何帮助!

4

3 回答 3

27

延期

extension UITableViewCell {
    func prepareDisclosureIndicator() {
        for case let button as UIButton in subviews {
            let image = button.backgroundImageForState(.Normal)?.imageWithRenderingMode(.AlwaysTemplate)
            button.setBackgroundImage(image, forState: .Normal)
        }
    }
}

斯威夫特 3:

    extension UITableViewCell {
        func prepareDisclosureIndicator() {
            for case let button as UIButton in subviews {
            let image = button.backgroundImage(for: .normal)?.withRenderingMode(.
                alwaysTemplate)
            button.setBackgroundImage(image, for: .normal)
        }
    }
}

做吧

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    cell.prepareDisclosureIndicator()
}

迅速 3:

override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    cell.prepareDisclosureIndicator()
    
}

目标-C:

for (UIView *subview in cell.subviews) {
    if ([subview isMemberOfClass:[UIButton class]]) {
        UIButton *button = (UIButton *)subview;
        UIImage *image = [[button backgroundImageForState:UIControlStateNormal] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
        [button setBackgroundImage:image forState:UIControlStateNormal];
    }
}
于 2016-03-21T23:37:18.843 回答
16

这是帮助我并且应该帮助其他人的东西。

任何 UIView 类型和子类型的 tintColor 属性都会将其 tint 设置传播到其层次结构中的子视图。您可以为 UITableView 设置 tintColor,它将应用于其中的所有单元格。

也就是说,不幸的是,并非所有 UITableViewCell 附件类型都可以着色。

染上色的人:

  • UITableViewCellAccessory复选标记
  • UITableViewCellAccessoryDe​​tailButton
  • UITableViewCellAccessoryDe​​tailDisclosureButton -> 只有细节部分

以下内容不会着色:

  • UITableViewCellAccessoryDisclosureIndicator
  • UITableViewCellAccessoryDe​​tailDisclosureButton -> 只有披露按钮

所以一般来说,你可以改变你的 UITableViewCell 附件的颜色。但是,如果您想将通常指示 segue 的灰色箭头更改为另一个视图,没有机会,它将保持灰色。

改变它的唯一方法是实际创建一个自定义 UIAccessoryView。这是一个有目的地分解以保持清晰的实现。虽然我相信存在更好的方法:

在我的自定义 UITableViewCell 类中的 awakeFromNib() 方法中

let disclosureImage = UIImage(named: "Disclosure Image")
let disclosureView = UIImageView(image: disclosureImage)
disclosureView.frame = CGRectMake(0, 0, 25, 25)
self.accessoryView = disclosureView

请注意,这也不能着色。与“标签栏项目”相比,它将具有所用图像的颜色,因此您可能需要多个图像用于选定的单元格和未选定的单元格。

于 2015-01-15T19:35:40.257 回答
0

这是 Tokuriku 对我们恐龙的回答的 Objective-C 版本:

    UIImageSymbolConfiguration *configuration = [UIImageSymbolConfiguration configurationWithPointSize:15.0f weight:UIImageSymbolWeightUnspecified];
    UIImageView *disclosureView = [[UIImageView alloc] initWithImage:[[UIImage systemImageNamed:@"chevron.right" withConfiguration:configuration] imageWithRenderingMode: UIImageRenderingModeAlwaysTemplate]];
    disclosureView.frame = CGRectMake(0, 0, 15, 15);
    disclosureView.tintColor = UIColor.systemYellowColor;
    cell.accessoryView = disclosureView;

您可以使用名为“chevron.right”的系统映像来避免创建自己的映像。这里给出的帧大小似乎给出了一个接近原生 Apple 图像大小的图像。

还要小心将 cell.accessoryView 设置为 nil 对于您打算使用标准附件类型的其他单元格

    cell.accessoryType = self.somePreference ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
    cell.accessoryView = nil;
于 2021-03-09T04:02:41.570 回答