设置UILABEL的初始值

时间:2011-06-10 20:51:24

标签: objective-c ios

我正在尝试创建一个简单的测验应用程序(我是初学者),当我启动应用程序时,我想要一个UILabel来显示第一个问题(一系列问题)。我在设置初始值时遇到了一些麻烦。

我做了几次尝试,成功了。我的QuizAppDelegate.h文件我声明我的UILabel是这样的:

 IBOutlet UILabel * questionField;

在我的主.m文件中,我尝试了以下内容:

- (id)init {

    [super init];

    questions = [[NSMutableArray alloc] init];

    // Not working
    questionField = [[UILabel alloc] init];
    [questionField setText:@"Hello"];

    // Working
    NSLog(@"Hello");

    [self defaultQuestions];
    // [self showQuestion];

    return self;
}

我尝试过的另一件事是QuizAppDelegate中的以下内容:

@property (nonatomic, retain) IBOutlet UILabel *questionField;

- (void)changeTitle:(NSString *)toName;

在.m文件中:

@synthesize questionField;

- (id)init {

    [super init];

    questions = [[NSMutableArray alloc] init];

    // Not working
    [self changeTitle:@"Hello"];

    // Working
    NSLog(@"Hello");

    [self defaultQuestions];
    // [self showQuestion];

    return self;
}

-(void)changeTitle:(NSString *)toName {
    [questionField setText:toName];
}

如何解决这个问题的任何提示都会很棒!

// Anders

5 个答案:

答案 0 :(得分:6)

希望您实际上没有将代码放入main.m。在iOS上,您很少修改该文件。

由于您正在AppDelegate中执行所有操作,因此请将其保留在那里(而不是创建新的UIViewController)。让我们从基础开始。

将Label添加为实例变量

你正确地做到了这一点 - 在.h文件的大括号内,放行

IBOutlet UILabel * questionField;

然后,声明相应的属性,并确保在.m文件中合成它。

@property (nonatomic, retain) IBOutlet UILabel *questionField;
@synthesize questionField    // in the .m file

在Interface Builder中添加UILabel

打开MainWindow.xib。将UILabel从库拖到代表应用程序窗口的窗口。然后从AppDelegate对象进行Control-Drag(Xcode 4左侧的第三个图标;它将在IB 3的Document窗口中标记)。你会看到一个小黑窗口 - 选择名为questionField的选项来建立连接。

有关屏幕截图以及如何在IB中建立连接,请参阅this link。这同样适用于Xcode 4.


更改文字

您不需要单独的方法来更改文本 - 只需修改标签的text属性。

选择一个在应用启动时调用的方法(applicationDidFinishLaunching:WithOptions:是一个很好的地方),并输入以下代码:

questionField.text = @"Hello";

就是这样!


<强>代码

QuizAppDelegate.h

#import <UIKit/UIKit.h>

@interface QuizAppDelegate : NSObject <UIApplicationDelegate> {
    IBOutlet UILabel *questionField;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UILabel *questionField;

@end

QuizAppDelegate.m

#import "QuizAppDelegate.h"

@implementation QuizAppDelegate

@synthesize window=_window;
@synthesize questionField;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    // Add the tab bar controller's current view as a subview of the window
    [self.window addSubview:self.questionField];
    [self.window makeKeyAndVisible];
    self.questionField.text = @"Hello";
    return YES;
}

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

@end

答案 1 :(得分:1)

如果您以编程方式创建标签,则必须将标签添加到视图中:

[self.view addSubview:questionField];

这假设您有一个ViewController。如果没有,你直接在AppDelegate(顺便说一句,这是一个非常糟糕的主意)这样做,那么

[self.window addSubview:questionField];

如果您要在IB中创建它,请确保设置连接。

你应该在IB中添加UILabel并以编程方式实例化它。如果要以编程方式创建,请仅调用alloc。否则,如果使用IB,请跳过该部分。您已经使用xib创建了它。

答案 2 :(得分:0)

我怀疑您没有正确创建Interface Builder布局 - 要么您完全错过了控件,要么更有可能是您没有将该控件连接到yout头文件中的questionField插座。

您需要将UILabel视图拖动到主视图中,然后将其连接到头文件中的正确行。

答案 3 :(得分:0)

你根本不应该那样使用你的main.m。事实上,你几乎肯定不会对它做任何事情。尝试创建一个UIViewController子类并练习你的测验。 (将UILabel添加到IB文件,然后连接插座。)也许在练习时使用基于视图的应用程序模板。

答案 4 :(得分:0)

这是一个很好的答案: “你正确地做到了这一点 - 在.h文件的花括号内,放行

IBOutlet UILabel * questionField;“  我试图更改mylabel.text的值,屏幕没有使用this.value更新标签。我加入了{IBOutlet UILabel * mylabel},它就像一个魅力! 所以这个答案对于以编程方式更改标签的文本是有效的! 感谢