如何通过程序向UIView添加文本

26

我有一个UIView,想要在上面添加几个文本。我使用了一个UITextView,但我认为这太过于复杂了,因为它不需要是可编辑的。我考虑使用一个UILabelUITextField,但我不知道如何告诉父视图在其中的哪个位置放置UILabelUITextField。我希望使用最小的占用空间对象,以让我将我选择的字体/颜色/大小的文本放在我想要的UIView中。这并不是什么难事,不是吗?

7个回答

63

对于您来说最简单的方法是:

UILabel *yourLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 300, 20)];

[yourLabel setTextColor:[UIColor blackColor]];
[yourLabel setBackgroundColor:[UIColor clearColor]];
[yourLabel setFont:[UIFont fontWithName: @"Trebuchet MS" size: 14.0f]]; 
[yourSuperView addSubview:yourLabel];

在你的代码中构建或填充视图可能需要大量使用CGRectMake。正如它的名称所示,它创建一个矩形,您可以使用它来设置您的UIView-Subclass(在此情况下是UILabel)相对于其父视图边框的相对位置和大小。

它的工作原理如下:

yourLabel.Frame = CGRectMake(x, y, width, height); //x,y,width,height are float values.

x 定义了父视图左边框与子视图开始位置之间的间距,同样适用于 y,但是它关联的是父视图顶部边框之间的间距。 然后,宽度和高度应该很容易理解。

希望这能让你明白。


1
我在文档中查找了UILabel和UITextField,发现它们都继承自...UITextField : UIControl : UIView : UIResponder : NSObjectUILabel : UIView : UIResponder : NSObject所以我猜想既然它们都继承自UIView,那么它们就拥有UIView的所有属性?...还有沿途获取的额外属性?这很有道理,但在UILabel的文档中,苹果没有列出除以下两个方法之外的任何方法:
  • (void)drawTextInRect:(CGRect)rect 和
  • (CGRect)textRectForBounds:(CGRect)bounds
- Steve
我可以安全地假设,对于我使用的任何类,我都可以访问到NSObject的所有超类的所有属性吗?感谢您的帮助,我们非常感激! - Steve
是的,你说得对,这就是继承的工作原理。但我仍然不明白你想通过drawTextInRect等方法实现什么。UILabel(或UITextview)是视图,它们提供了让你轻松设置文本的功能。也许我只是没看出问题所在 :)。 - samsam

8

与其寻找一种方法告诉视图如何定位UILabel,不如使用“center”告诉UILabel在视图中自行定位。

例如:

myLabel.center = CGPointMake(0.0, 0.0);

希望您能够使用UILabel,对于我来说,它是一种基本的灵活的不可编辑文本形式。


谢谢 - 这是一个简洁明了的表述。我想知道像UILabel这样的东西是否比完整的UIView负担更小?现在我(认为我)意识到它是从UIView继承而来,这是一个错误的假设吗? - Steve
1
Steve,我想你是一个追求完美的人,这很好。但是我们的思路有所不同,UILabel已经为您提供了方便和经过充分测试的功能。UIView以更低级别的方式实现了相同的功能。是的,这可能意味着更少的开销、更快速、更少的内存使用,但是在努力和错误发生的情况下,这值得吗?我建议如果UILabel能够满足您的需求,请使用它,除非您要显示成千上万个UILabel,那么您可以重新考虑使用更有效的方法来完成任务。 - Manny

4

对于Swift:

    let yourLabel = UILabel(frame: CGRectMake(100, 100, 100, 100))
    yourLabel.textColor = UIColor.whiteColor()
    yourLabel.backgroundColor = UIColor.blackColor()
    yourLabel.text = "mylabel text"
    yoursuperview.addSubview(yourLabel)

只需针对Swift 3更改UILabel语法为UILabel(frame: CGRect(x:100, y:100, width:100, height:100))。 - Jirson Tavera

2

这个问题比较老,但是如果想要在没有使用UILabel或UITextField的情况下(因为所有其他答案都描述了它们的用法,但问题是如何在没有它们的情况下完成),对于一个纯UIView文本选项,我使用子类化UIView中的drawRect方法。像这样:

 - (void)drawRect:(CGRect)rect{
     NSString *string = @"Hello World!";
     [string drawAtPoint:CGPointMake(100, 100) withFont:[UIFont boldSystemFontOfSize:16.0]];
 }

1
我现在收回之前的说法 - 实际上,从iOS 7开始这是不被鼓励的。苹果表示:“NSString类的许多绘图添加已被弃用,而更新的变体则更受青睐。” 这意味着drawAtPoint:WithFont不是将NSString绘制到UIView中的最佳方法。 - july
你可以在iOS7及以上版本中使用-(void)drawAtPoint:(CGPoint)point withAttributes:(NSDictionary *)attrs NS_AVAILABLE_IOS(7_0);。 - goelectric

1

可能有点晚了,但这是我使用的内容:

CGRect labelFrame = CGRectMake(120,300, 530, 100);
UILabel *myLabel = [[UILabel alloc] initWithFrame:labelFrame];
//If you need to change the color
[myLabel setTextColor:[UIColor whiteColor]];
//If you need to change the system font
[myLabel setFont:[UIFont fontWithName:NULL size:23]];
//If you need alignment
[myLabel setTextAlignment:NSTextAlignmentCenter];
// The label will use an unlimited number of lines
[myLabel setNumberOfLines:0];
//Add label view to current view
[self.view addSubview:myLabel];
NSString *someString = @"Sample String, Yarp!";
myLabel.text = someString;

1

此例程在X-Y位置显示文本

-(void)placeText:(NSString *)theText:(int)theX:(int)theY {
    UILabel *textLabel;

    // Set font and calculate used space
    UIFont *textFont = [UIFont fontWithName:@"Helvetica" size:14];
    CGSize textStringSize = [theText sizeWithFont:textFont constrainedToSize:CGSizeMake(300,50) lineBreakMode:NSLineBreakByTruncatingTail];

    // Position of the text
    textLabel = [[UILabel alloc] initWithFrame:CGRectMake(theX+OFFSETIMAGEX-(textStringSize.width/2), theY+OFFSETIMAGEY-(textStringSize.height/2), textStringSize.width,textStringSize.height)];

    // Set text attributes
    textLabel.textColor = [UIColor blackColor];
    textLabel.backgroundColor = [UIColor orangeColor];
    textLabel.font = textFont;
    textLabel.text = theText;

    // Display text
    [self.view addSubview:textLabel];
}

0
将一个UILabel添加到您的视图中。然后重写View的layoutSubviews方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接