Я знаю, что с помощью UIImageView
Мы можем установить Аксессуар индикатора Disclosure, но я хочу изменить только цвет индикатора раскрытия без использования UIImageView
.
Возможно ли это или нет? Если это возможно, то как?
Я знаю, что с помощью UIImageView
Мы можем установить Аксессуар индикатора Disclosure, но я хочу изменить только цвет индикатора раскрытия без использования UIImageView
.
Возможно ли это или нет? Если это возможно, то как?
Добавьте свой собственный индикатор раскрытия информации:
cell.accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"accessory.png"]];
Я знаю, что опаздываю на вечеринку, но я только что подготовил пользовательское представление, которое отображает представление о раскрытии. Я быстро сделал это для демонстрации, так что это может быть не очень точно, это просто делает работу. Надеюсь, это поможет кому-то:
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];
Теоретически вы также сможете изменить свой цвет после инициализации, не пробовали это.
Похож:
Z.
Извините, я супер супер поздно к вечеринке, но я боролся с этим сегодня и просто понял (в 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
}
}
}
}
Вам нужно создать свой собственный UIButton и установить его как ячейку accessoryView. Вы не можете изменить свой цвет, просто указав его UIColor.
Вы можете настроить индикатор раскрытия информации, добавив одно изображение для нормального состояния, а другое для выбранного (выделено).
одна библиотека для настройки индикатора раскрытия информации: здесь > .
Как указано выше, один из способов изменения аксессуара - это добавить свой собственный 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
Вы можете попробовать с помощью 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];