对于Two Label,使用UILabel Class的方法不同

时间:2014-03-12 07:27:23

标签: ios iphone objective-c inheritance uilabel

在我的应用程序中,我有一个滚动视图,显示动态生成的标签(有些 70px高度,有些 50px高度)。

我需要对两种类型的标签使用 - (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)];

1 个答案:

答案 0 :(得分:0)

使edge insets值成为标签子类的属性,并在创建标签时设置insets。在绘制时使用该属性而不是创建本地值。