Я должен изменить цвет disclosureIndicatorView
аксессуар в a UITableViewCell
. Я думаю, что существует два способа сделать это, но я не могу выяснить который оптимум. Таким образом, вот то, что я думаю, что могу сделать.
Существует свойство UITableViewCell
- accessoryView
. Таким образом, я могу использовать setAccessoryView:(UIView *)view
и передача просматривает как UIImageView
содержание изображения, которое я хочу.
Я записал служебный класс, который создает довольное представление (материал как цвет фона, добавляя другой материал, и т.д.) для моей ячейки, и я добавляю этот довольный представление к ячейке в UITableViewDelegate
. Другая опция состоит в том, чтобы потянуть a UIImage
переопределение drawRect
метод CustomContentView
служебный класс.
Опция 1 Performing - я могу получить вещи, сделанные яблоко путь. Просто выскажите им мнение, и они делают остальных. Но я предполагаю добавление нового UIView
объект к каждой строке мог бы оказаться выделением тяжелого объекта и уменьшением частоты кадров. По сравнению только с a UIImage
объект в моем contentView
. Я верю UIImage
легче, чем UIView
.
Бросьте некоторых легких людей и помогите мне решить по нему.
Но я предполагаю, что добавление нового объекта UIView в каждую строку может оказаться тяжелым распределением объектов и снижением частоты кадров. По сравнению с просто объектом UIImage в моем contentView. Я считаю, что UIImage легче, чем UIView.
Рисование изображения напрямую почти наверняка будет иметь лучшую производительность, чем добавление подпредставления. Вы должны определить, нужна ли эта дополнительная производительность. Я использовал несколько дополнительных представлений для настраиваемых индикаторов раскрытия основных ячеек, и производительность была в порядке. Однако, если вы уже делаете пользовательский рисунок для прямоугольника содержимого, может быть не так уж и сложно создать дополнительный вид.
Если вы заинтересованы в рисовании индикатора, а не в использовании графического файла, то вот код, который я для этого разработал:
// (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.