UITableViewCell шары, такие как iChat - PullRequest
0 голосов
/ 22 июня 2011

Я делаю что-то вроде приложения для чата для iPhone, и я нашел этот фрагмент кода от Сэма Соффса, который называется SSMessagesViewController. Я обнаружил, что он работает идеально, пока в моей таблице много строк, и я полагаю, что drawrect использует повторно ячейки потому что повторяет один и тот же контент строк каждые 6 (но данные разные) ... есть идеи, как я могу решить это?

- (void)drawRect:(CGRect)frame {
    UIImage *bubbleImage = _messageStyle == SSMessageStyleLeft ? _leftBackgroundImage : _rightBackgroundImage;
    CGSize bubbleSize = [[self class] bubbleSizeForText:_messageText];
    CGRect bubbleFrame = CGRectMake((_messageStyle == SSMessageStyleRight ? self.frame.size.width - bubbleSize.width : 0.0f), kMarginTop, bubbleSize.width, bubbleSize.height);
    [bubbleImage drawInRect:bubbleFrame];

    CGSize textSize = [[self class] textSizeForText:_messageText];
    CGFloat textX = (CGFloat)bubbleImage.leftCapWidth - 3.0f + ((_messageStyle == SSMessageStyleRight) ? bubbleFrame.origin.x : 0.0f);
    CGRect textFrame = CGRectMake(textX, kPaddingTop + kMarginTop, textSize.width, textSize.height);
    [_messageText drawInRect:textFrame withFont:kFont lineBreakMode:kLineBreakMode alignment:(_messageStyle == SSMessageStyleRight) ? UITextAlignmentRight : UITextAlignmentLeft];
}

1 Ответ

0 голосов
/ 22 июня 2011

Я думаю, на этом этапе у вас есть два изображения.Изображение левого пузыря и изображение правого пузыря. Можно добавлять изображения в слои.Представьте, что у вас есть две ячейки, одна из которых указана слева, а другая направлена ​​вправо. Вы должны создать подкласс TableCell.Определите собственный стиль и, в зависимости от назначенного значения стиля, вы можете добавить эти изображения в подслой вида Backround, который вы добавили (добавили явно).http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/ProvidingCALayerContent.html Также сделайте одну вещь.переопределить метод layoutsubviews. CALayers не были изменены при изменении границ своего UIView.Почему? это пример.В этот момент сбросьте размер подслоя BackgroundView на размер ячейки таблицы.Теперь вам нужно просто разделить Tablecellheight в методе delgate http://developer.apple.com/library/ios/documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html#//apple_ref/doc/uid/TP40006942-CH3-SW25

...