Подтвердить что ты не робот

Как изменить цвет индикатора раскрытия UITableVeiw Programmatically?

Я знаю, что с помощью UIImageView Мы можем установить Аксессуар индикатора Disclosure, но я хочу изменить только цвет индикатора раскрытия без использования UIImageView.

Возможно ли это или нет? Если это возможно, то как?

4b9b3361

Ответ 1

Добавьте свой собственный индикатор раскрытия информации:

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

Ответ 2

Я знаю, что опаздываю на вечеринку, но я только что подготовил пользовательское представление, которое отображает представление о раскрытии. Я быстро сделал это для демонстрации, так что это может быть не очень точно, это просто делает работу. Надеюсь, это поможет кому-то:

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

Затем в моей пользовательской ячейке я делаю это:

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

Теоретически вы также сможете изменить свой цвет после инициализации, не пробовали это.

Похож: Sample usage of the view

Z.

Ответ 3

Извините, я супер супер поздно к вечеринке, но я боролся с этим сегодня и просто понял (в iOS8 и 9). Используя View Debugger, было ясно, что треугольник Disclosure является UIImage в UIImageView в UIButton.

Итак, в -awakeFromNib, я перебирал через subviews, чтобы найти кнопку. Как только я нашел кнопку, ссылку на исходное изображение можно было бы получить через -backgroundImageForState:

Как только вы получите исходное изображение, вы можете создать копию, которая является изображением Шаблона, вызывая [originalImage imageWithRenderingMode: AlwaysTemplate]

Затем вы можете установить backgroundImage для всех доступных состояний. Как только вы это сделаете, изображение автоматически отобразит цвет оттенка.

Ниже приведен код быстрого кода:

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

Ответ 4

Вам нужно создать свой собственный UIButton и установить его как ячейку accessoryView. Вы не можете изменить свой цвет, просто указав его UIColor.

Вы можете настроить индикатор раскрытия информации, добавив одно изображение для нормального состояния, а другое для выбранного (выделено).

одна библиотека для настройки индикатора раскрытия информации: здесь > .

Ответ 5

Как указано выше, один из способов изменения аксессуара - это добавить свой собственный UIImageView. Однако на самом деле вы можете предоставить любой объект, полученный из UIView. Затем я рекомендовал бы использовать UILabel с шрифтом значка (например, icomoon) вместо UIImageView. UILabel и шрифт значка обеспечивают гибкость как по изображению, так и по цвету.

let font = UIFont(name: "icomoon", size: 16.0)
let icon = "\u{e60f}"    
let lbl = UILabel(frame: CGRectMake(0, 0, 20, 20))
lbl.font = font
lbl.text = icon
cell.accessoryView = lbl

Ответ 6

Вы можете попробовать с помощью uiimageview применить сотовый аксессуар, например, код ниже:

cell.accessoryView = myAccessoryUIImageView;
cell accessoryview uiimageview not align correctly try below code:


UIView* accessoryView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 24, 50)];
UIImageView* accessoryViewImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"accessory_image.png"]];
accessoryViewImage.center = CGPointMake(12, 25);
[accessoryView addSubview:accessoryViewImage];
[cell setAccessoryView:accessoryView];