Невозможно нарисовать TextInRect с помощью UILabel - PullRequest
0 голосов
/ 26 июня 2011

Я хочу нарисовать UILabel на мою камеру.Я не хочу добавлять его в качестве подпредставления для повышения производительности.Я делаю следующее:

-(void)drawContent
{
    usernameLabel.text = [message valueForKey:@"user_login"];
    usernameLabel.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:12];
    usernameLabel.textColor = [UIColor blackColor];
    [usernameLabel drawTextInRect:CGRectMake(77, 5, 200, 20)];
}

, но я получаю массу ошибок:

<Error>: CGContextSetFillColorWithColor: invalid context 0x0
<Error>: CGContextSetStrokeColorWithColor: invalid context 0x0
<Error>: CGContextSetFont: invalid context 0x0
<Error>: CGContextSetTextMatrix: invalid context 0x0
<Error>: CGContextSetFontSize: invalid context 0x0
<Error>: CGContextSetTextPosition: invalid context 0x0
<Error>: CGContextShowGlyphsWithAdvances: invalid context 0x0

Ответы [ 4 ]

1 голос
/ 26 июня 2011

Вы должны действительно вызывать любые методы рисования в реализации drawRect: UIView.Если я правильно помню, UITableViewCells использовался для поддержки рисования напрямую, где вы могли бы сделать следующее в своем подклассе UITableViewCell:

- (void) drawRect: (CGRect) rect
{
    [self drawContent];
}

Теперь это не рекомендуется по ряду причин.Тем не менее, вы все равно можете создать пользовательский подкласс UIView, который рисует фактическое содержимое ячейки, добавляет его в contentView ячейки и позволяет реализовать drawRect:, внутри которого вы отправляете drawTextInRect:.Это будет работать, как и ожидалось.

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

Чтобы нарисовать UILabel, просто создайте и добавьте UILabel в contentView ячеек в методе - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath.

Нет необходимости звонить drawTextInRect: напрямую. Это следует использовать только при создании подкласса ячейки UILabel и перезаписи этого метода альтернативной реализацией. Вызов метода напрямую, как в вашем коде, вызывает эти ошибки, потому что система не настроила графический контекст для рисования.

РЕДАКТИРОВАТЬ Обновление с указанием образца:

Если вы хотите нарисовать ячейку таблицы самостоятельно, проверьте TableViewSuite , предоставленный Apple. Там вы найдете 5_CustomTableViewCell / Classes / TimeZoneView, который используется как подпредставление содержимого для 5_CustomTableViewCell / Classes / TimeZoneCell. TimeZoneView показывает, как нарисовать ваш пользовательский текст непосредственно в представление без использования UILabel.

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

Прочитали ли вы метод documentation?

Этот метод предназначен только для подклассов, и вы получаете ошибки, потому что не определен контекст рисования и это относится к UILabel экземпляр, а не то, где drawContent вызывается.Если вы хотите нарисовать текст в другом виде, используйте экземпляр NSString.Это обеспечивает drawing extensions.

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

Я никогда не пробовал использовать drawTextInect, но вы можете попробовать так:

 cellLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, cell.frame.size.width,   cell.frame.size.height)];

cell.selectionStyle = UITableViewCellSelectionStyleNone;
cellLabel.backgroundColor = [UIColor clearColor];
cellLabel.font = [UIFont boldSystemFontOfSize:14];
cellLabel.lineBreakMode = UILineBreakModeWordWrap;
[cell.contentView addSubview:cellLabel];

Надеюсь, это поможет !!

...