坚持使用IBOutlet文件

时间:2011-01-10 11:57:57

标签: iphone objective-c xcode ios

所以,我正在关注这个Xcode教程书:Iphone和Ipad Game Development for Dummies。这是一本好书,但这里和那里都存在一些缺陷。大多数时候我可以找到解决这些缺陷的方法,但现在我偶然发现了一些我无法解决的问题。甚至他们的网站或联系人也不知道答案。

我试图用汽车和东西制作游戏。但问题在于主菜单。我已经用自定义按钮模式制作了按钮。并使用IbActions使它们工作(实际上,“新游戏”是现在唯一有效的按钮,因为它的功能已经编写过)。但现在我必须让IBOutlets给他们一个动画。这本书告诉我使用QuartzCore.framework。现在的问题是,当我尝试构建它时,我收到此错误:在接口中找不到属性'newGameButton'的声明。

这是我的剧本。

标题文件:

#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>

@interface MainMenuViewController : UIViewController {

//This has changed         
@property(nonatomic,retain) IBOutlet UIButton* newGameButton;                             
@property(nonatomic,retain) IBOutlet UIButton* statsButton;
@property(nonatomic,retain) IBOutlet UIButton* settingsButton;


        CAKeyframeAnimation* popAnimation;

}
-(IBAction) newGame:(id)sender;
-(IBAction) showStats:(id)sender;
-(IBAction) showSettings:(id)sender;
@end

.m文件(称为植入对吗?):

#import "MainMenuViewController.h"
#import "TrafficAppDelegate.h"
#import "TrafficViewController.h"

@implementation MainMenuViewController


-(IBAction) newGame:(id)sender{
        TrafficViewController* traffic = [[TrafficViewController alloc] initWithNibName:@"TrafficViewController" bundle:nil];
        [self.navigationController pushViewController:traffic animated:NO];
}

-(IBAction) showStats:(id)sender{
}
-(IBAction) showSettings:(id)sender{
}

@synthesize newGameButton, statsButton, settingsButton;

-(void)viewDidLoad{

        [super viewDidLoad];

        popAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];

        popAnimation.keyTimes = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0], [NSNumber numberWithFloat:0.7], [NSNumber numberWithFloat:1.0], nil];
        popAnimation.values = [NSArray arrayWithObjects: [NSNumber numberWithFloat:0.01], [NSNumber numberWithFloat:1.1], [NSNumber numberWithFloat:1.0], nil];


        [popAnimation retain];

}

-(void)popView:(UIView*)view{
        [view setHidden:NO];
        [[view layer] addAnimation:popAnimation forKey:@"transform.scale"];
}

-(void)viewWillAppear:(BOOL)animated{
        [popAnimation setDuration:0.3];
        [newGameButton setHidden:YES];
        [statsButton setHidden:YES];
        [settingsButton setHidden:YES];
        [self performSelector:@selector(popView:) withObject:newGameButton afterDelay:0.25];
        [self performSelector:@selector(popView:) withObject:statsButton afterDelay:0.3];
        [self performSelector:@selector(popView:) withObject:settingsButton afterDelay:0.35];
}

@end

现在我首先认为他们没有连接到“用户界面”构建器中的按钮。但那也没有用。我试图重拍整个剧本。我试图在Xcode中重新加载脚本。我甚至试图制作自己的版本。我没有任何选择。有谁知道我的剧本有什么问题?

3 个答案:

答案 0 :(得分:3)

将头文件中对象的属性设置为 @property(nonatomic, retain) IBOutlet UIButton* newGameButton; . . .

并在.m文件中合成它们 @synthesis newGameButton; 对您声明的所有对象执行此操作 然后在IB中连接它们

答案 1 :(得分:1)

你是否加载了正确的UIViewController?我的意思是,如果您正在使用界面构建器,请检查在您的主窗口xib中,您使用的viewController对象与您的MainMenuViewController类相对应

答案 2 :(得分:0)

你说你看到了:

  

&#34;没有财产声明&newGameButton&#39;在界面&#34;

中找到

必须合成在.h(标题)或.m(实现)中声明的任何属性:

     @property (nonatomic,retain) IBOutlet UIButton* newGameButton;

对于.m(实现)

中的属性,这样
    @synthesize newGameButton;