我是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 {
...
目前应用程序正在运行,但是当我点击“下一步”按钮时标签不会改变。有人可以帮忙吗?
答案 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