iOS:UILabel文本无法加载

时间:2014-05-13 12:36:13

标签: ios text uilabel self

我分配给UILabel的文本在大多数情况下都没有加载:当需要以编程方式重新加载它或重写它时它的工作原理,但在其他情况下它不会。

UILabels已在故事板中创建并且已正确链接。

这里我将提供一个简单的例子:

welcome.h

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

@interface Welcome : UIViewController

@property (strong) IBOutlet UILabel * label;

@property (weak) IBOutlet UIButton * entrar;

//@property (strong, nonatomic) NSString * benvingut;


@end

welcome.m

#import "Welcome.h"

@interface Welcome()

@end

@implementation Welcome

-(void) viewdidLoad{
    [super viewDidLoad];
    UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 140, 47)];
    [self.view addSubview: label];
    self.label.text = @"Benvingut a la pràtica de iOS I";
    label.numberOfLines = 4;
    label.textColor = [UIColor blackColor];

}

-(IBAction) buttonPressed: (id) sender
{

   [self performSegueWithIdentifier:@"Tutorial1" sender:self];
}


@end

如何解决?

修改

我的标签肯定是奇怪的东西,因为我使用不同的系统将文本加载到其中一个屏幕中,而它在另一个屏幕中可以正常工作。我将添加他们的代码以使其更清晰。

Colors.h

@interface Colors : UIViewController

@property (strong) IBOutlet UILabel * label;
@property (weak) IBOutlet UITextField * color;
@property (weak) IBOutlet UIButton * enviar;
@property (strong) IBOutlet UILabel * correct;

@property (strong, nonatomic) NSString * correcte;
@property (strong, nonatomic) NSString * capcalera;

@end

Colors.m

#import "Colors.h"

@interface Colors()
@end

@implementation Colors


-(void) viewdidLoad{

    [super viewDidLoad];

    _capcalera = @" Introdueix el color que vols que es mostri.";
    self.label.text= self.capcalera;


    _correcte = @"";
    self.correct.text = self.correcte;

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
                action:@selector(dismissKeyboard)];

    [self.view addGestureRecognizer:tap];
}

-(void)dismissKeyboard {
    [_color resignFirstResponder];
}

@end

在这种情况下,标签不会像我希望的那样初始化,在另一个......

Riddle.h

import

@interface Riddle : UIViewController

@property (strong) IBOutlet UILabel * label;
@property (weak) IBOutlet UITextField * resposta;
@property (weak) IBOutlet UIButton * enviar;
@property (strong) IBOutlet UILabel * lab;


@property (strong, atomic) NSString * etiqueta;
@property (strong, atomic) NSString * eti;

@end

Riddle.m

#import "Riddle.h"

@interface Riddle()

@end

@implementation Riddle

-(void) viewDidLoad
{
    [super viewDidLoad];

    _etiqueta = @" 1: Que es allò blanc que tenia Santiago?";
    self.label.text = self.etiqueta;

    _eti = @"";
    self.lab.text = self.eti;


    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
            action:@selector(dismissKeyboard)];

    [self.view addGestureRecognizer:tap];

}

-(void)dismissKeyboard {
    [_resposta resignFirstResponder];
}

@end

这里的标签会按照我的说法加载:当编码几乎完全相同时,“颜色”屏幕不会这样做,这很奇怪。

也许这些例子有助于弄清楚我做错了什么?

4 个答案:

答案 0 :(得分:2)

您的代码存在的问题是,您似乎正在创建两个单独的标签:一个在您的界面中,一个以编程方式。

事实上,如果您在label中创建的新viewDidLoad与您的self.label IBOutlet具有相同的框架,则这些行会创建一个新标签,以覆盖您的旧版本一个完全:

UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 140, 47)];
[self.view addSubview: label];

由于您已经在界面中创建了UILabel,因此无需以编程方式重新创建它。您可以完全删除上述行,并使用self.label访问/设置您预先制作的IBOutlet标签。

[super viewDidLoad]; viewDidLoad中的所有代码替换为:

self.label.text = @"Benvingut a la pràtica de iOS I";
self.label.numberOfLines = 4;
self.label.textColor = [UIColor blackColor];

编辑:根据AlessandroOrrù的建议,如果您实际上没有在界面中创建标签(尽管您使用IBOutlet暗示了这一点),您也可以通过在{{1之后替换所有代码 - 以编程方式设置UILabel在您的[super viewDidLoad];中:

viewDidLoad

P.S。如果您在界面中创建了一个标签,但没有正确连接,那么第二个解决方案在技术上可行,但您的原始界面标签将被浪费;所以我建议你学习如何正确地连接self.label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 140, 47)]; self.label.text = @"Benvingut a la pràtica de iOS I"; self.label.numberOfLines = 4; self.label.textColor = [UIColor blackColor]; [self.view addSubview: self.label];

答案 1 :(得分:2)

这只是问题的错字或您的viewDidLoad方法真的被称为viewdidLoad吗?案件事项;)

答案 2 :(得分:1)

您正在将文本分配给IBOutlet参考self.label.text = ...,但您创建了一个新的UILabel实例,未分配任何文本。

尝试:

UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 140, 47)];
[self.view addSubview: label];
label.text = @"Benvingut a la pràtica de iOS I"; // <<-- Removed 'self.'
label.numberOfLines = 4;
label.textColor = [UIColor blackColor];
self.label = label; // <--- Add this

答案 3 :(得分:1)

创建UILabel属性时,必须在创建UILabel时使用该属性。一个例子:

// interface - @property (strong, nonatomic) IBOutlet UILabel *label;

- (void) viewDidLoad 
{
    self.label = [[UILabel alloc] CGRectMake(0, 0, 140, 47)];
    self.label.text = @"text goes here";
    // or [self.label setText:@"text goes here"];
}

没有属性变量

- (void) viewDidLoad
{
    UILabel *label = [[UILabel alloc] CGRectMake(0, 0, 140, 47)];
    label.text = @"text goes here";
    // or [self.label setText:@"text goes here"];
}

只是一个总结:如果你要创建一个属性,请确保使用self.varName,这样你就不会让它只是独自坐着。