UITableViewCell 配件没有被着色
UITableViewCell accessory not being tinted
我已经阅读了关于该主题的多个问答,但 none 似乎有效,所以这是我的问题。
我创建了一个自定义 UITableViewCell 并在 Storyboard 中要求有一个披露指示器附件。据说 tintColor 应该改变指示器的颜色,但经过大量研究后,我发现了以下内容:
- 单元格的 accessoryView 映射为 nil 值,因此我不能影响它的 tintColor
我尝试像这样使用 selectedBackgroundView 创建 accessoryView:
self.accessoryView = UIView()
显然,它只是创建了一个空白 space 并且原始的披露附件消失了。我真的对这一切感到困惑,找不到影响电池附件颜色的方法。非常欢迎任何帮助!
以下是对我有帮助并且应该对其他人有所帮助的内容。
任何 UIView 类型和子类型的 tintColor 属性都会将其色调设置传播到其层次结构中的子视图。您可以为 UITableView 设置 tintColor,它将应用于其中的所有单元格。
也就是说,不幸的是,并非所有 UITableViewCell 附件类型都可以着色。
染色的人:
- UITableViewCellAccessoryCheckmark
- UITableViewCellAccessoryDetailButton
- UITableViewCellAccessoryDetailDisclosureButton -> 只有细节部分
以下不着色:
- UITableViewCellAccessoryDisclosureIndicator
- UITableViewCellAccessoryDetailDisclosureButton -> 只有披露按钮
所以一般来说,您将能够更改 UITableViewCell 附件的颜色。但是如果你想改变通常表示一个 segue 的灰色箭头到另一个视图,没机会,它会保持灰色。
更改它的唯一方法是实际创建自定义 UIAccessoryView。
这是一个有目的地分解以使其清晰的实现。
尽管我相信存在更好的方法:
在我的自定义 UITableViewCell 中 Class 在 awakeFromNib() 方法中
let disclosureImage = UIImage(named: "Disclosure Image")
let disclosureView = UIImageView(image: disclosureImage)
disclosureView.frame = CGRectMake(0, 0, 25, 25)
self.accessoryView = disclosureView
请注意,这也不能着色。与 "Tab Bar Items" 相比,它将具有所用图像的颜色,因此您可能需要为选定的单元格和未选定的单元格使用多个图像。
扩展
extension UITableViewCell {
func prepareDisclosureIndicator() {
for case let button as UIButton in subviews {
let image = button.backgroundImageForState(.Normal)?.imageWithRenderingMode(.AlwaysTemplate)
button.setBackgroundImage(image, forState: .Normal)
}
}
}
Swift 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()
}
swift 3 :
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
cell.prepareDisclosureIndicator()
}
Objective-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];
}
}
这是 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;
我已经阅读了关于该主题的多个问答,但 none 似乎有效,所以这是我的问题。
我创建了一个自定义 UITableViewCell 并在 Storyboard 中要求有一个披露指示器附件。据说 tintColor 应该改变指示器的颜色,但经过大量研究后,我发现了以下内容:
- 单元格的 accessoryView 映射为 nil 值,因此我不能影响它的 tintColor
我尝试像这样使用 selectedBackgroundView 创建 accessoryView:
self.accessoryView = UIView()
显然,它只是创建了一个空白 space 并且原始的披露附件消失了。我真的对这一切感到困惑,找不到影响电池附件颜色的方法。非常欢迎任何帮助!
以下是对我有帮助并且应该对其他人有所帮助的内容。
任何 UIView 类型和子类型的 tintColor 属性都会将其色调设置传播到其层次结构中的子视图。您可以为 UITableView 设置 tintColor,它将应用于其中的所有单元格。
也就是说,不幸的是,并非所有 UITableViewCell 附件类型都可以着色。
染色的人:
- UITableViewCellAccessoryCheckmark
- UITableViewCellAccessoryDetailButton
- UITableViewCellAccessoryDetailDisclosureButton -> 只有细节部分
以下不着色:
- UITableViewCellAccessoryDisclosureIndicator
- UITableViewCellAccessoryDetailDisclosureButton -> 只有披露按钮
所以一般来说,您将能够更改 UITableViewCell 附件的颜色。但是如果你想改变通常表示一个 segue 的灰色箭头到另一个视图,没机会,它会保持灰色。
更改它的唯一方法是实际创建自定义 UIAccessoryView。 这是一个有目的地分解以使其清晰的实现。 尽管我相信存在更好的方法:
在我的自定义 UITableViewCell 中 Class 在 awakeFromNib() 方法中
let disclosureImage = UIImage(named: "Disclosure Image")
let disclosureView = UIImageView(image: disclosureImage)
disclosureView.frame = CGRectMake(0, 0, 25, 25)
self.accessoryView = disclosureView
请注意,这也不能着色。与 "Tab Bar Items" 相比,它将具有所用图像的颜色,因此您可能需要为选定的单元格和未选定的单元格使用多个图像。
扩展
extension UITableViewCell {
func prepareDisclosureIndicator() {
for case let button as UIButton in subviews {
let image = button.backgroundImageForState(.Normal)?.imageWithRenderingMode(.AlwaysTemplate)
button.setBackgroundImage(image, forState: .Normal)
}
}
}
Swift 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()
}
swift 3 :
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
cell.prepareDisclosureIndicator()
}
Objective-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];
}
}
这是 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;