Пользовательский UITableViewCell, стиль которого очень похож на UITableViewCellStyleValue2 - PullRequest
1 голос
/ 24 ноября 2011

Я хотел бы создать UITableViewCell с двумя «TextLabels» в синем тексте слева и двумя «DetailTextLabels» в черном справа, максимально похожими по стилю на UITableViewCellStyleValue2.

До сих пор я установил текст TextLabel и DetailTextLabel очень длинным (чтобы он занимал всю ширину, назначенную синим меткам), установил шрифт UIColor.Clear и затем взяли их измерения каждый раз, когда они оказываются. Это ужасно по многим причинам, но работает по моде.

Я бы хотел сделать это с помощью пользовательского UIView и пользовательского метода Draw. Это более красивое решение, но теперь я упускаю важную информацию: ширину области, используемой для отображения TextLabel. Я мог бы жестко запрограммировать это, что кажется приемлемым способом сделать что-то на iOS (даже если это заставляет меня чувствовать себя грязным), но затем я должен жестко запрограммировать это для iPad и iPhone как в горизонтальной, так и в вертикальной ориентации. И тогда он, вероятно, сломается, как только мой UITableView станет простым, а не сгруппированным, или еще что-нибудь.

Где взять стандартную, текущую ширину этой тупой области меток?

Спасибо!

Ответы [ 3 ]

1 голос
/ 24 ноября 2011

Задумывались ли вы о создании ячейки в Интерфейсном Разработчике и использовании статического UINib для ее загрузки? Это кажется достаточно быстрым для меня, но я не тестировал ничего более медленного, чем 3GS.

Если это достаточно быстро для вашего приложения, я настоятельно рекомендую вам, в будущем вы сможете делать небольшие (и большие!) Изменения с гораздо меньшими усилиями.

1 голос
/ 24 ноября 2011

Каждый UITableViewCell имеет textLabel и detailTextLabel. На UITableViewCellStyleValue2, textLabel находится на левой стороне, а detailTextLabel на правой стороне. Таким образом, вы можете получить доступ к области левой метки следующим образом:

cell.textLabel.frame

и вы можете получить доступ к нужной области метки следующим образом:

cell.detailTextLabel.frame
0 голосов
/ 01 февраля 2012

Просто создайте подкласс UIView, и внутри вашего drawRect сделайте следующее.

- (void) drawRect:(CGRect)rect {
    NSString *label = @"Label 1";
    CGSize size = [label sizeWithFont:[UIFont boldSystemFontOfSize:12.0f] 
                   constrainedToSize:CGSizeMake(self.frame.size.width, 100.0f) 
                   lineBreakMode:UILineBreakModeCharacterWrap];

    [label drawInRect:CGRectMake(0.0f, 0.0f, size.width, size.height) withFont:[UIFont boldSystemFontOfSize:12.0f]];

    [super drawRect:rect];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...