我在GameScreen.m文件中有以下方法,在GameScreen.h文件中有自己的声明 - (void)drawNumbers:
//GameScreen.h
#import <UIKit/UIKit.h>
@interface GameScreen : UIView
{
IBOutlet UIButton *cell00;
}
- (void) drawNumbers;
- (IBAction) onCellClick:(id)sender;
@property (nonatomic, retain) IBOutlet UIButton *cell00;
@end
//GameScreen.m
#import "GameScreen.h"
- (void) drawNumbers
{
//testing if this works, so far it doesn't
[cell00 setTitle:@"Whatever" forState:UIControlStateNormal];
[cell00 setTitle:@"Whatever" forState:UIControlStateHighlighted];
}
我正试图从我的GameScreenViewController.m文件中调用此方法,这样:
//GameScreenViewController.m
#import "GameScreenViewController.h"
#import "GameScreen.h"
...
- (void) viewDidLoad
{
GameScreen *aGameScreen = [[GameScreen alloc] init];
[aGameScreen drawNumbers];
[aGameScreen release];
[super viewDidLoad];
}
这应该改变GameScreen.xib文件中按钮的标题,其中GameScreenViewController.m是viewController,而GameScreen类是事件处理程序,我得到所有按钮点击,计时器运行等等。我正在尝试从[viewDidLoad]调用[drawNumbers],因为我希望在屏幕显示时更改标题(屏幕管理是通过AppDelegate文件完成的)。
问题是,如果我通过
从同一个类中调用drawNumbers实例//GameScreen.m
#import GameScreen.h
-(void) onButtonClick:(id)sender
{
//some other code
[self drawNumbers];
}
它的工作原理(也就是说,代码实现或图形界面没有任何问题)。
我浏览了Apple Guide和互联网上的大量网页,但我似乎无法对此发现任何消息。非常感谢任何进一步的帮助(包括在ADG中找到答案的答案)。
(已编辑:此处将AppDelegate代码翻转到特定视图,以防万一):
//myAppAppDelegate.h
#import <UIKit/UIKit.h>
@class myAppViewController, GameScreenViewController;
@interface myAppDelegate : NSObject <UIApplicationDelegate>
{
UIWindow *window;
myAppViewController *viewController;
GameScreenViewController *gameScreenViewController;
}
- (void) flipToGameScreen;
@property (nonatomic, retain) UIWindow *window;
@property (nonatomic, retain) GameScreenViewController *gameScreenViewController;
@end
//myAppAppDelegate.m
-(void) flipToGameScreen
{
GameScreenViewController *aGameScreenView = [[GameScreenViewController alloc] initWithNibName: @"GameScreen" bundle:nil];
[self setGameScreenViewController:aGameScreenView];
[aGameScreenView release];
[gameScreenViewController.view.frame = [[UIScreen mainScreen] applicationFrame];
[viewController.view removeFromSuperview];
[self.window addSubview:[gameScreenViewController view]];
}
答案 0 :(得分:0)
由于你的cell00
是由NIB设定的,如果你只是[[GameScreen alloc] init]
,它将是零。只有在加载了相应的NIB(并且实际建立了连接)时才会设置它。
如果可以在viewDidLoad
中访问该单元格,请在GameScreen
上创建一个属性并将其传递给该属性(或专用的initWithCell:
或其他内容)。
如果IBOutlet GameScreen *aGameScreen;
上有GameScreenViewController
之类的内容(并且在同一个NIB中建立了与cell00
的连接),则应该访问该内容。