Objective-c新手 - 需要帮助UIViews

时间:2010-12-20 18:37:27

标签: iphone objective-c

我是iphone开发的新手,经过大量的阅读后,我仍在努力弄清楚UIViews是如何正常运作的。我一直在玩它,我到目前为止就是这个地方:

我使用基于视图的应用程序创建了一个新的xcode项目。我有我的MMAppViewController类,我创建了一个名为“Level1View”的新UIViewController子类。

有一个标题为“Level 1”的按钮将我带到“Level1View”viewController。在这个viewController中,有一个“下一个”按钮,一个“主菜单”按钮(返回到MMAppViewController),并且有一个标签,当前标题为“Level 1”。

我的问题是我用来更改标签标题的代码不起作用!有人知道为什么吗?这是我的代码:

@class MMAppViewController;

@interface MMAppAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    MMAppViewController *viewController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet MMAppViewController *viewController;

@end

@implementation MMAppViewController

-(IBAction)pushLevel1{

    Level1View *level1View = [[Level1View alloc] initWithNibName:nil bundle:nil];
    [self presentModalViewController:level1View animated:YES];
}  
...

#import <UIKit/UIKit.h>


@interface Level1View : UIViewController {
    IBOutlet UILabel *labelTitle;

}
-(IBAction)pushBack;
-(IBAction)pushNext;
@end

 #import "Level1View.h"
    #import "MMAppViewController.h"


    @implementation Level1View

    -(IBAction)pushBack{

        MMAppViewController *MainView = [[MMAppViewController alloc] initWithNibName:nil bundle:nil];
        [self presentModalViewController:MainView animated:YES];

    }
    -(IBAction)pushNext{

        [labelTitle setText:(@"Thanks for playing :)")];

    }

    - (void)didReceiveMemoryWarning {
    ...

目前应用程序正在运行,但是当我点击“下一步”按钮时标签不会改变。有人可以帮忙吗?

4 个答案:

答案 0 :(得分:1)

你确定UINavigationController对你想做的工作不是一个更好的工具吗?这将使您可以轻松管理一堆UIView对象。

那就是说,您是否尝试过添加日志以确保调用pushNext方法? labelTitle在哪里声明?你是否使用过XIB?

答案 1 :(得分:0)

你确定你在IB中连接了标签吗?

如果您在@property (nonatomic, retain) IBOutlet UILabel *labelTitle;中设置了属性“Level1View.h”,则可以从主视图访问它:

Level1View *level1View = [[Level1View alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:level1View animated:YES];
level1View.labelTitle.text = @"something";
[level1View release];

另一件事你不应该再次出现主视图控制器而是用以下方法解除Level1View:

@implementation Level1View
    -(IBAction)pushBack{
        [self dismissModalViewControllerAnimated:YES];
    }

// 也许问题是[[Level1View alloc] initWithNibName:nil bundle:nil]您必须指定要加载的笔尖,例如[[Level1View alloc] initWithNibName:@"Level1View" bundle:nil]

答案 2 :(得分:0)

您是否将Interface Builder中的Label绑定到Level1View中的labelTitle出口?

如果您忘记了该步骤,则无法使用插座。即使在几年之后,我仍然有时会忘记这一步。

- 麦克

答案 3 :(得分:0)

将headerTitle声明为头文件中的属性,并在.m中合成labelTitle - 只要labelTitle通过接口构建器连接,其余代码就可以了。

.h
@property (nonatomic, retain) IBOutlet UILabel *labelTitle;

.m
@synthesize labelTitle;

然后你的二传手调用就可以了。 (此外,点符号适用于合成属性,因此您也可以使用它)

change
[labelTitle setText:(@"Thanks for playing :)")];
to
labelTitle.text = @"Thanks for playing :)";

合成属性将在运行时创建setter和getter方法。阅读:The Objective-C Programming Language