自定义UILabel类iOS

时间:2015-09-25 12:37:47

标签: ios iphone uilabel

在我的iOS应用程序中,我想要UILabel,它可以在大多数屏幕上使用动态文本。

所以我在我的Utility类中编写了一个方法,它创建了UILabel和相关的UIView,我也将文本设置为我想要的UILabel。 我使用这个Utility类方法在我想要的地方创建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];
}

这是我在Utility类中编写的用于创建UILabel的方法。

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

我就像上面那样使用它。

6 个答案:

答案 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;
}

这是我在Utility类中编写的用于创建UILabel的方法.Here是视图中隐藏和取消隐藏标签的isHide参数。

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

这里的YES是隐藏您查看的标签。

答案 1 :(得分: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;
}

完美地工作......

答案 2 :(得分: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中查看get。

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

答案 3 :(得分:1)

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

在ViewController中,您有一个标签属性:

@property (nonatomic, strong) UILabel *label

在自定义类中,您可以使用factory方法创建UILabel实例。虽然我会更清楚地更改名称。您不应该在此方法中将标签添加到视图中,该方法是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. 如果您使用标签,请勿使用幻数。使用命名常量。
  4. 有关您为什么不应该过度使用标记属性的更多信息,请here

答案 4 :(得分: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];
}

工作完美..试试这个

答案 5 :(得分: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];