2010-08-31 36 views
0

我们有一个窗口充满了小视图正方形(想起计算器)。iPhone - 以编程方式在视图中显示单个字符串

因为我们想在视图中显示一个字符串不使用Interface Builder来添加字符串的窗口上的特定视图。 我们需要能够更改字符串并刷新视图。

我们如何通过编程将字符串添加到一个视图,并显示它?


更新:

确定这里是我们目前拥有的代码。头文件中没有什么特别的。 我认为真正的窘境正在考虑我们可以很容易地获得背景颜色来改变,为什么我们的文本没有显示? 这两个版本都在里面,很高兴看到“苹果”或“橙子”。

- (id)initWithFrame:(CGRect)frame { 
if ((self = [super initWithFrame:frame])) { 

    bgString = @"orange"; 

    UILabel* aLabel = [[UILabel alloc] init]; 
    aLabel.text = @"apple"; 
    self.textLabel = aLabel; 
    [aLabel release]; 
    [self addSubview:textLabel]; 
} 
return self; 
} 

- (void)drawRect:(CGRect)rect { 
    // Drawing code 
    [[UIColor yellowColor] setFill]; 
    UIRectFill(rect); 
    [self drawStringCenteredIn:rect]; 
} 

- (void)drawStringCenteredIn:(CGRect)r { 
    //CGSize strSize = [bgString size]; 
    CGPoint strOrigin; 
    strOrigin.x = r.origin.x; //+ (r.size.width - 10)/2; 
    strOrigin.y = r.origin.y; //+ (r.size.height - 10)/2; 
    //[bgString drawAtPoint:strOrigin withFont:[UIFont fontWithName:@"Helvetica" size:10]]; 
    [textLabel drawTextInRect:r]; 
} 

回答

4

在您的视图控制器的.h:

@interface MyViewController 
{ 
    UILabel* label; 
} 

@property (nonatomic, retain) UILabel* label; 

在您的视图控制器的.m:

- (void)dealloc 
{ 
    [label release]; 
    [super dealloc]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UILabel* aLabel = [[UILabel alloc] init]; 
    aLabel.text = @"Initial Text"; 
    self.label = aLabel; 
    [aLabel release]; 
    [self.view addSubview:aLabel]; 
} 

- (void)viewDidUnload 
{ 
    [self.label removeFromSuperview]; 
    self.label = nil; 
} 

// Call this when you need to update the label 
- (void)updateLabel 
{ 
    self.label.text = @"Some updated text"; 
} 

难道从内存,但它应该工作。

+0

别忘了'[aLabel sizeToFit]' – cobbal 2010-08-31 04:07:46

+0

嗯。也忘了用框架来初始化它 - 希望OP可以采取这种方式并运行它。 – 2010-08-31 04:14:00

+0

感谢大家迄今为止的快速反应。 这将工作得很好,如果我使用ViewController,但我特别想与主视图控制器上的“视图”进行交互。 所以我需要我的代码去drawRect类型的结构。 – Evolve 2010-08-31 04:52:43

0

如何创建一个UILabel并将其添加到视图?

+0

打我8秒,+1 – cobbal 2010-08-31 03:56:36

+0

我们如何以编程方式做到这一点? – Evolve 2010-08-31 04:00:25

+0

当我输入我的解决方案时,St3fan发布了这个消息 - 查看我的答案。 – 2010-08-31 04:02:18

0

如果子类的UIView,你可以请你在视图的drawRect字符串。这允许在修改文本,外观和放置方面有很大的灵活性(甚至可以对它进行动画,旋转,旋转等)。

更改NSString后,在视图上调用setNeedsDisplay。然后在drawRect被调用时在NSString上执行drawAtPoint:withFont:。

+0

虽然你认为这种方法允许“极大的灵活性”,但对UIView进行子类化和重写'drawRect:'可能是这项工作的错误工具。 – 2010-08-31 05:15:09

1

试试这个:

UILabel* aLabel = [[UILabel alloc] initWithFrame:[self bounds]]; 

如果要创建手动标签,你需要设置它的框架手动过。 框架本身是父视图(超级视图)内的大小和位置。 在我的例子中,我设置了标签的框架来占据整个视图。如果您需要自定义尺寸,您可以使用:

UILabel* aLabel = [[UILabel alloc] initWithFrame:CGRectMake(x,y,width,height)]; 

其中(x,y) - 标签左上角的位置。

相关问题