Который является лучшим способом изменить цвет/представление представления аксессуара индикатора раскрытия в ячейке табличного представления в iOS?

Я должен изменить цвет disclosureIndicatorView аксессуар в a UITableViewCell. Я думаю, что существует два способа сделать это, но я не могу выяснить который оптимум. Таким образом, вот то, что я думаю, что могу сделать.

Существует свойство UITableViewCell - accessoryView. Таким образом, я могу использовать setAccessoryView:(UIView *)view и передача просматривает как UIImageView содержание изображения, которое я хочу.

Я записал служебный класс, который создает довольное представление (материал как цвет фона, добавляя другой материал, и т.д.) для моей ячейки, и я добавляю этот довольный представление к ячейке в UITableViewDelegate. Другая опция состоит в том, чтобы потянуть a UIImage переопределение drawRect метод CustomContentView служебный класс.

Опция 1 Performing - я могу получить вещи, сделанные яблоко путь. Просто выскажите им мнение, и они делают остальных. Но я предполагаю добавление нового UIView объект к каждой строке мог бы оказаться выделением тяжелого объекта и уменьшением частоты кадров. По сравнению только с a UIImage объект в моем contentView. Я верю UIImage легче, чем UIView.

Бросьте некоторых легких людей и помогите мне решить по нему.

21
задан Cesare 3 July 2015 в 10:02
поделиться

2 ответа

Но я предполагаю, что добавление нового объекта UIView в каждую строку может оказаться тяжелым распределением объектов и снижением частоты кадров. По сравнению с просто объектом UIImage в моем contentView. Я считаю, что UIImage легче, чем UIView.

Рисование изображения напрямую почти наверняка будет иметь лучшую производительность, чем добавление подпредставления. Вы должны определить, нужна ли эта дополнительная производительность. Я использовал несколько дополнительных представлений для настраиваемых индикаторов раскрытия основных ячеек, и производительность была в порядке. Однако, если вы уже делаете пользовательский рисунок для прямоугольника содержимого, может быть не так уж и сложно создать дополнительный вид.

4
ответ дан 29 November 2019 в 06:14
поделиться

Если вы заинтересованы в рисовании индикатора, а не в использовании графического файла, то вот код, который я для этого разработал:

// (x,y) is the tip of the arrow
CGFloat x = CGRectGetMaxX(self.bounds) - RIGHT_MARGIN;
CGFloat y = CGRectGetMidY(self.bounds);
const CGFloat R = 4.5;
CGContextRef ctxt = UIGraphicsGetCurrentContext();
CGContextMoveToPoint(ctxt, x-R, y-R);
CGContextAddLineToPoint(ctxt, x, y);
CGContextAddLineToPoint(ctxt, x-R, y+R);
CGContextSetLineCap(ctxt, kCGLineCapSquare);
CGContextSetLineJoin(ctxt, kCGLineJoinMiter);
CGContextSetLineWidth(ctxt, 3);
// If the cell is highlighted (blue background) draw in white; otherwise gray
if (CONTROL_IS_HIGHLIGHTED) {
    CGContextSetRGBStrokeColor(ctxt, 1, 1, 1, 1);
} else {
    CGContextSetRGBStrokeColor(ctxt, 0.5, 0.5, 0.5, 1);
}
CGContextStrokePath(ctxt);

Если вы сделаете пользовательский подкласс UIView, то сделайте описанное выше в методе drawRect:, и используйте его в качестве аксессуара, вы сможете сделать цветным все, что захотите.

Вспомогательное представление (пользовательское или UIImageView) не будет большой проблемой производительности, пока вы правильно перерабатываете экземпляры UITableViewCell.

24
ответ дан 29 November 2019 в 06:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: