我们有一个充满小视图的窗口(想想一个计算器)。
对于窗口上的特定视图,我们希望在视图中显示单个字符串,而不使用Interface Builder添加字符串。 我们需要能够更改字符串并刷新视图。
我们如何以编程方式将字符串添加到视图并显示它?
更新
好的,这是我们目前的代码。头文件没什么特别之处。 我想真正的quandry正在考虑我们可以很容易地改变背景颜色,为什么我们的文本只是没有显示? 两个版本都在那里,很乐意展示“苹果”或“橘子”。
- (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];
}
答案 0 :(得分: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";
}
这是从记忆中做到的,但它应该有用。
答案 1 :(得分:1)
试试这个:
UILabel* aLabel = [[UILabel alloc] initWithFrame:[self bounds]];
如果您手动创建标签,则还需要手动设置标签。 框架本身是父视图内的大小和位置(superview)。 在我的例子中,我设置了标签框架以占据整个视图。如果您需要自定义尺寸,可以使用:
UILabel* aLabel = [[UILabel alloc] initWithFrame:CGRectMake(x,y,width,height)];
其中(x,y) - 标签左上角的位置。
答案 2 :(得分:0)
如何创建UILabel
并将其添加到视图中?
答案 3 :(得分:0)
如果你是UIView的子类,你可以在视图的drawRect中绘制你的字符串。这样可以非常灵活地修改文本,外观和位置(甚至可以为其设置动画,旋转,旋转等)。
更改NSString后,在视图上调用setNeedsDisplay。然后在调用drawRect时在NSString上执行drawAtPoint:withFont:。