4

您好我正在尝试使用以下代码在 iOS 7 中的 UITableViewCell 中绘制字符串

-(void)drawRect:(CGRect)rect{
[super drawRect:rect];
CGRect playerNameRect = CGRectMake(0, kCellY, kPlayerNameSpace, kCellHeight);

NSDictionary*dictonary = [NSDictionary
                          dictionaryWithObjectsAndKeys:
                          [UIColor hmDarkGreyColor], NSForegroundColorAttributeName,
                          kFont, NSFontAttributeName,
                          nil];

[self.playerName drawInRect:playerNameRect withAttributes:dictonary];

}

但是我什么都看不到...... self.playerName 不是零,并且 playerNameRect 是正确的。

我以前使用以下代码来做同样的事情,但最近在 iOS 7 中被弃用了

        [self.playerName drawInRect:playerNameRect withFont:kFont lineBreakMode:NSLineBreakByTruncatingTail alignment:NSTextAlignmentCenter];

同样奇怪的是我无法在 UITableViewCell 上的 drawRect 中绘制任何东西......当我在 UIView 上绘制矩形时,不推荐使用的代码有效。

4

4 回答 4

11

您不应该使用UITableViewCell'drawRect方法来执行自定义绘图。正确的方法是创建一个自定义UIView并将其添加为单元格的子视图(作为contentView属性的子视图)。您可以将绘图代码添加到此自定义视图中,一切都会正常工作。

希望这可以帮助!

也看看这些帖子:

Table View Cell 自定义图纸1

Table View Cell 自定义图纸2

Table View Cell 自定义图纸3

于 2013-09-19T23:16:51.827 回答
7

正如其他人所说,不要直接使用 UITableViewCell 的 drawRect 选择器。通过这样做,您依赖于 UITableViewCell 的实现细节,Apple 不保证这种行为不会在未来的版本中中断,就像它在 iOS 7 中所做的那样......相反,创建一个自定义 UIView 子类,并添加它作为 UITableViewCell 的 contentView 的子视图,如下所示:

@implementation CustomTableViewCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        [self.contentView addSubview:[[CustomContentView alloc]initWithFrame:self.contentView.bounds]];
    }
    return self;
}

@end

和自定义内容视图:

@implementation CustomContentView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.backgroundColor = [UIColor clearColor];
    }
    return self;
}


- (void)drawRect:(CGRect)rect
{
    NSDictionary * attributes = @{
                                  NSFontAttributeName : [UIFont fontWithName:@"Helvetica-bold" size:12],
                                  NSForegroundColorAttributeName : [UIColor blackColor]
                                  };

    [@"I <3 iOS 7" drawInRect:rect withAttributes:attributes];
}

@end

像魅力一样工作!

于 2013-09-19T23:22:51.237 回答
3

尝试cell.backgroundColor = [UIColor clearColor]在 init 中设置。

于 2013-09-24T21:05:16.177 回答
1

While I agree with the accepted answer, here's my take on it for the records:

If you don't need any of the builtin UITableViewCell functionality (swiping, removing, reordering, ...) and just use it as a container to draw your custom stuff, then you might want to consider removing all of the cells subviews in tableview:willDisplayCell:ForRowAtIndexPath. This will make your drawing be visible again and will get you maximum performance (since you get rid of the subviews you don't need).

于 2014-03-05T10:38:51.407 回答