2015-09-25 47 views
0

在我的iOS应用程序中,我想要UILabel,它可以在动态文本的大部分屏幕上使用。自定义UILabel类iOS

所以我在我的Utility类中创建了方法,它创建了UILabel和关联的UIView,并且我还将文本设置为我想要的UILabel。 而我使用这种工具类的方法来创建我想要的UILabel

但是,我面临的问题是我无法隐藏或从视图中删除此UILabel。

所以,请给我你的宝贵意见......

在此先感谢.....

+(void)drawLabel:(UIView *)view message:(NSString *)message 
{ 
    UILabel *messageLabel = [[UILabel alloc]init]; 
    messageLabel.frame = CGRectMake(0, 0, 320, 30); 
    [messageLabel setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin]; 
    messageLabel.text = message; 
    [messageLabel setCenter:view.center]; 
    [messageLabel setTextAlignment:NSTextAlignmentCenter]; 
    [view addSubview:messageLabel]; 
} 

这里是我写的实用工具类创建的UILabel的方法。

[CACCustomMessageLabel drawLabel:self.view message:@"MY LABEL2"]; 

而我正在使用这个像上面那样。

+0

是...在'+(无效)drawLabel: (UIView *)查看消息:(NSString *)message'方法 – pritam

+0

您需要在您的文件中声明公开标签,并为该标签创建一个隐藏方法 –

回答

1

你可以在你的工具类中创建类似这样的方法。

+(void)drawLabel:(UIView *)view message:(NSString *)message isHide:(BOOL)isHide 
{ 
    UILabel *messageLabel = [[UILabel alloc]init]; 
    messageLabel.frame = CGRectMake(0, 0, 320, 30); 
    [messageLabel setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin]; 
    messageLabel.text = message; 
    [messageLabel setCenter:view.center]; 
    [messageLabel setTextAlignment:NSTextAlignmentCenter]; 
    [view addSubview:messageLabel]; 
    messageLabel.hidden = isHide; 
} 

这里是我写的实用工具类,用于创建UILabel.Here是隐藏和取消隐藏标签从您的视图的isHide参数的方法。

[uilabelUtility drawLabel:self.view message:@"Jaydip Godhani" isHide:YES]; 

这里是隐藏标签从你的视图。

+0

但是当我发送时它不会显示标签是 – pritam

0

只需设置为您的标签标记值

+(void)drawLabel:(UIView *)view message:(NSString *)message tag:(int)tagValue 
{ 
    UILabel *messageLabel = [[UILabel alloc]init]; 
    messageLabel.tag = tagValue; 
    messageLabel.frame = CGRectMake(0, 0, 320, 30); 
    [messageLabel setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin]; 
    messageLabel.text = message; 
    [messageLabel setCenter:view.center]; 
    [messageLabel setTextAlignment:NSTextAlignmentCenter]; 
    [view addSubview:messageLabel]; 
} 

创建标签像

[CACCustomMessageLabel drawLabel:self.view message:@"MY LABEL2" tag:123]; 

然后访问它在任何你想要的VC内部,也隐藏或删除如下,

UILabel *label = (UILabel)[self.view viewWithTag:123]; 
label.hidden = YES; 
[label removeFromSuperview]; 
+0

我已写入属性在我的ViewController中,但它仍然不会隐藏或删除标签 – pritam

1
+(void)drawLabel:(UIView *)view message:(NSString *)message isHide:(BOOL)isHide 
{ 
    UILabel *messageLabel = [[UILabel alloc]init]; 
    messageLabel.frame = CGRectMake(0, 0, 320, 30); 
    [messageLabel setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin]; 
    messageLabel.text = message; 
    [messageLabel setCenter:view.center]; 
    [messageLabel setTextAlignment:NSTextAlignmentCenter]; 
    [view addSubview:messageLabel]; 
    messageLabel.hidden = isHide; 
} 

working perf ectly ......

+0

这是不正确的方式来绘制标签evrytime和隐藏这 – pritam

1

使用UILabel的标签创建。

+(void)drawLabel:(UIView *)view message:(NSString *)message tag:(int)tagValue 
{ 
    UILabel *messageLabel = [[UILabel alloc]init]; 
    messageLabel.tag = tagValue; 
    messageLabel.frame = CGRectMake(0, 0, 320, 30); 
    [messageLabel setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin]; 
    messageLabel.text = message; 
    [messageLabel setCenter:view.center]; 
    [messageLabel setTextAlignment:NSTextAlignmentCenter]; 
    [view addSubview:messageLabel]; 
} 

而且这样的调用。

[CACCustomMessageLabel drawLabel:self.view message:@"MY LABEL2" tag:100]; 

在视图中使用UIlabel的给定标记获取UILabel。

UILabel *yourLbl = (UILabel)[self.view viewWithTag:123]; 
yourLbl.hidden = YES; 
[yourLbl removeFromSuperview]; 
+0

这是不正确的方式来绘制标签evrytime和隐藏这 – pritam

1

因为您没有对它的引用,所以以后无法隐藏或删除标签。您的drawLabel方法应该返回它创建的标签的一个实例,将其保存为一个属性,之后当您想修改它时,您可以通过该属性访问它。

在你的ViewController你有一个标签属性:

@property (nonatomic, strong) UILabel *label 

在您的自定义类,你可以有一个创建的UILabel实例factory方法。虽然我会更清楚地改名。你不应该在标签添加到视图中这个方法是的viewController的工作:

+(UILabel *)labelWithMessage:(NSString *)message 
{ 
    UILabel *messageLabel = [[UILabel alloc]init]; 
    messageLabel.frame = CGRectMake(0, 0, 320, 30); 
    [messageLabel setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin]; 
    messageLabel.text = message; 
    [messageLabel setTextAlignment:NSTextAlignmentCenter]; 
    return messageLabel; 
} 

打电话给你的方法,这样在你的ViewController:

self.label = [CACCustomMessageLabel drawLabel:self.view message:@"MY LABEL2"]; 
[self.view addSubview:self.label] 
self.label.center = self.view.center; 

现在你有一个参考你在你的ViewController标签,您可以隐藏或删除它是上海华:

[self.label removeFromSuperview] 

其他信息

请尽量避免使用UIView标签。遵循以下规则:

  1. 不要将数据存储在视图的标记中。首选子类化和Objective-C关联引用,以将附加信息与视图相关联。
  2. 为了获得对子视图的引用,首选实体属性和XIB插座。
  3. 如果您确实使用标签,请勿使用幻数。使用命名常量。为什么你不应该过度使用标记属性

更多信息,可以发现here

+0

但这个标签是无法访问我在ViewController – pritam

+0

你必须声明你的属性在你的ViewController,我'我更新了我的答案 – Istvan

1
+(void)drawLabel:(UIView *)view message:(NSString *)message tag:(int)tagValue 
{ 
    UILabel *messageLabel = [[UILabel alloc]init]; 
    messageLabel.tag = tagValue; 
    messageLabel.frame = CGRectMake(0, 0, 320, 30); 
    [messageLabel setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin]; 
    messageLabel.text = message; 
    [messageLabel setCenter:view.center]; 
    [messageLabel setTextAlignment:NSTextAlignmentCenter]; 
    [view addSubview:messageLabel]; 
} 

工作Perfect..Try这