How to change color of disclosure indicator of UITableVeiw Programmatically? [duplicate] How to change color of disclosure indicator of UITableVeiw Programmatically? [duplicate] ios ios

How to change color of disclosure indicator of UITableVeiw Programmatically? [duplicate]


Add your own disclosure indicator:

cell.accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"accessory.png"]];


I know I'm late to the party but I just prepared a custom view that draws a disclosure view. I've quickly made it for a demo so it might not be extremely precise, it just does the job. Hope it helps someone:

PZDisclosureIndicator.h

//// Created by Pall Zoltan on 10/10/14.// Copyright (c) 2014 pallzoltan. All rights reserved.//#import <Foundation/Foundation.h>#import <UIKit/UIKit.h>@interface PZDisclosureIndicator : UIView@property(nonatomic, strong) UIColor *color;- (PZDisclosureIndicator *)initWithColor:(UIColor *)color;@end

PZDisclosureIndicator.m:

//// Created by Pall Zoltan on 10/10/14.// Copyright (c) 2014 pallzoltan. All rights reserved.//#import "PZDisclosureIndicator.h"@interface PZDisclosureIndicator ()@property(nonatomic) CGFloat red;@property(nonatomic) CGFloat green;@property(nonatomic) CGFloat blue;@property(nonatomic) CGFloat alpha;@end@implementation PZDisclosureIndicator- (void)drawRect:(CGRect)rect {    CGContextRef context = UIGraphicsGetCurrentContext();    CGContextSetRGBFillColor(context, self.red, self.green, self.blue, self.alpha);    CGContextMoveToPoint(context, 4, 0);    CGContextAddLineToPoint(context, 4, 0);    CGContextAddLineToPoint(context, 16, 12);    CGContextAddLineToPoint(context, 4, 24);    CGContextAddLineToPoint(context, 0, 24 - 4);    CGContextAddLineToPoint(context, 9, 12);    CGContextAddLineToPoint(context, 0, 4);    CGContextAddLineToPoint(context, 4, 0);    CGContextFillPath(context);}- (PZDisclosureIndicator *)initWithColor:(UIColor *)color {    self = [super initWithFrame:CGRectMake(0, 0, 16, 24)];    self.backgroundColor = [UIColor clearColor];    self.color = color;    [self setNeedsDisplay];    return self;}- (void)setColor:(UIColor *)color {    _color = color;    [self.color getRed:&_red green:&_green blue:&_blue alpha:&_alpha];    [self setNeedsDisplay];}@end

Then in my custom cell, I do this:

self.accessoryView = [[PZDisclosureIndicator alloc] initWithColor:SECONDARY_HIGHLIGHT_COLOR];

Theoretically you should be able to change its colour after initialisation too, haven't tried that.

Looks like this:Sample usage of the view

Z.


Sorry, I'm super super late to the party but I was struggling with this today and just figured it out (in iOS8 and 9). Using the View Debugger, it was clear the Disclosure triangle is a UIImage in a UIImageView in a UIButton.

So in -awakeFromNib, I was iterating through the subviews to find a button. Once I found the button, a reference to the original image could be acquired via -backgroundImageForState:

Once you get the original image, you can create a copy that is a Template image by calling [originalImage imageWithRenderingMode:AlwaysTemplate]

Then you can set the backgroundImage for all available states. Once you do that, the Image picks up the tint color automatically.

Below is some swift sample code:

class GratuitousDisclosureTableViewCell: UITableViewCell {    private weak var disclosureButton: UIButton? {        didSet {            if let originalImage = self.disclosureButton?.backgroundImageForState(.Normal) {                let templateImage = originalImage.imageWithRenderingMode(.AlwaysTemplate)                self.disclosureButton?.setBackgroundImage(templateImage, forState: .Normal)                self.disclosureButton?.setBackgroundImage(templateImage, forState: .Highlighted)                self.disclosureButton?.setBackgroundImage(templateImage, forState: .Disabled)                self.disclosureButton?.setBackgroundImage(templateImage, forState: .Selected)                self.disclosureButton?.setBackgroundImage(templateImage, forState: .Application)                self.disclosureButton?.setBackgroundImage(templateImage, forState: .Reserved)            }        }    }    override func awakeFromNib() {        super.awakeFromNib()        for view in self.subviews {            if let button = view as? UIButton {                self.disclosureButton = button                break            }        }      }}