По-другому используйте метод класса UILabel для двух меток

В моем приложении у меня есть прокрутка, которая показывает динамически генерируемые метки (некоторые имеют высоту 70 пикселей, а некоторые - 50 пикселей).

Мне нужно использовать метод - (void) drawRect: (CGRect) rect для обоих типов меток.

для этого я создал один класс контроллера UILabel и в нем есть метод

- (void)drawRect:(CGRect)rect
{
// Drawing code
NSLog(@"draw rect in uilabel class");
UIEdgeInsets insets = {0, 0, -14, 0};
return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)]; 
}

мне нужно установить вставки одной метки = {0, 0, -14, 0}; и другой ярлык {0, 0, -22, 0};
, но случайным образом (означает, что для ярлыка 1, 2, 4, 6, 9 дно будет -14, а для 3,5,7,8,10,11 дно будет -22).

да, я могу сделать это, поместив два класса UILabel и получив от него объект.

но мне нужно использовать методы этого класса для двух типов меток.

теги бесполезны, я их использовал.

Я бы хотел сделать что-нибудь подобное

- (void)drawRect:(CGRect)rect
{
// Drawing code
  if(for label one){
    UIEdgeInsets insets = {0, 0, -14, 0};
    return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
  }
  else if(for label Two){
    UIEdgeInsets insets = {0, 0, -22, 0};
    return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];
  }
} 

любая идея, код, ссылка, учебник будут отличным подспорьем ...

------------ РЕДАКТИРОВАТЬ: ----------------------------- ------

#import <UIKit/UIKit.h>

@interface LabelInListViewClass : UILabel

@end

и в файле .m

#import "LabelInListViewClass.h"

@implementation LabelInListViewClass

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
    // Initialization code

    NSLog(@"in Label Class");

}
return self;
}
- (void)drawRect:(CGRect)rect
{
// Drawing code
UIEdgeInsets insets = {0, 0, -14, 0};
return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)];

}

и в файле ViewController .m

label1 = [[LabelInListViewClass alloc] initWithFrame:CGRectMake(16,varForHeight,320, 50)];

label2 = [[LabelInListViewClass alloc] initWithFrame:CGRectMake(16,varForHeight,320, 70)];

person Sam    schedule 12.03.2014    source источник
comment
вы можете создать mutalbearray с номерами, скажем, от 1 до 11. перемешать массив. извлеките первый и установите для него вставку. повторять, пока массив не будет содержать объекты.   -  person Anoop Vaidya    schedule 12.03.2014
comment
да, но это не статично, поэтому я не могу взять такой массив. потому что сначала метка выделяется из этого класса UILabel, и тогда все будет работать. и в моем случае с распределением будет вызывать весь метод класса. мне нужно получить разницу в размещении этикеток.   -  person Sam    schedule 12.03.2014


Ответы (1)


Сделайте значение вставок краев свойством подкласса надписей и установите вставки при создании этикеток. Используйте свойство при рисовании вместо создания локального значения.

person jrturton    schedule 12.03.2014
comment
Я придерживаюсь своего ответа. Вы спрашиваете у меня код или чего-то не понимаете? - person jrturton; 12.03.2014