1

リッチ テキスト (NSAttributedString) を表示するために使用している変更された UIView があります。UIView を UITableViewCell に追加していて、drawRect が実行されています。テキストを表示するために、そのメソッドをオーバーライドしました。

問題は、行 #3 に必要なテキストが書かれているが、その下に古いテキストがまだ残っていることです。

他のすべてのセルでも同じことが起こります。

各セルの UIView をクリアするにはどうすればよいですか?

これは私のドローレクトです

- (void)drawRect:(CGRect)rect
{
   [super drawRect:rect];
   CGContextRef context = UIGraphicsGetCurrentContext();
   CGContextClearRect(context, self.bounds);
   CGContextSetTextMatrix(context, CGAffineTransformIdentity);
   CGContextTranslateCTM(context, 0, self.bounds.size.height);
   CGContextScaleCTM(context, 1.0, -1.0);

   CGMutablePathRef path = CGPathCreateMutable(); //1
   CGPathAddRect(path, NULL, self.bounds );

   CTFramesetterRef framesetter =
   CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)self.attString); 

   CTFrameRef frame =

   CTFramesetterCreateFrame(framesetter,

                         CFRangeMake(0, [self.attString length]), path, NULL);

   CTFrameDraw(frame, context); //4
   CFRelease(frame); //5
   CFRelease(path);
   CFRelease(framesetter);

}

そして、これを cellforrowatindexpath に追加する方法を次に示します。

 NSAttributedString* attrString = [p attrStringFromMarkup:[NSString stringWithFormat:@"%@%@ %@%@ %@%@", @"<font color=\"black\">", userName, @"<font color=\"gray\">",actionType,  @"<font color=\"black\">", object]];
CGRect rect = CGRectMake(0, 0, 249, 50);
CTView *aView = [[CTView alloc]initWithFrame:rect];
[aView setBackgroundColor:[UIColor clearColor]];
[(CTView*)aView setAttString: attrString];
[cell.feedView addSubview:aView];
4

1 に答える 1

2

UITableViewCellを作成した後にCTViewを一度だけ作成し、それをセルで再利用する必要があります。それ以外の場合は、CTViewを同じセルに複数回追加します。

コードは次のようになります。

cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
   cell = [[MyTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

   CGRect rect = CGRectMake(0, 0, 249, 50);
   CTView *aView = [[CTView alloc]initWithFrame:rect];
   [aView setBackgroundColor:[UIColor clearColor]];
   [aView setTag:kCTViewTag];
   [cell.feedView addSubview:aView];
}

// Configure the cell...
 NSAttributedString* attrString = [p attrStringFromMarkup:[NSString stringWithFormat:@"%@%@ %@%@ %@%@", @"<font color=\"black\">", userName, @"<font color=\"gray\">",actionType,  @"<font color=\"black\">", object]];

CTView* view = (CTView*)[cell viewWithTag:kCTViewTag];
[view setAttString:attrString];

setAttStringメソッドはを呼び出す必要があります[self setNeedsDisplay]

于 2012-11-02T22:46:55.767 に答える