Прежде чем я начну, я новичок, поэтому, пожалуйста, не перегружайте меня. (хоть я наверное и сделал с тобой извините) :/
Итак, в основном у меня есть 1 основное представление (NSView), на которое я загружаю другие представления. Итак, мой метод awakeFromNib работает, и он загружает мое меню «Пуск» (главное меню для игры в крестики-нолики). В меню есть кнопка одиночного проигрывателя и двойного проигрывателя, и в зависимости от того, какую кнопку я нажимаю, я хотел бы, чтобы программа загружала дальнейшие виды.
Итак, у меня есть класс AppController, который контролирует, какие представления загружаются с помощью метода setViewController. Проблема в том, что я не нашел способа подключить кнопки из моего меню «Пуск» к классу AppController. Поэтому я подумал, что если внутри класса меню «Пуск» я создам объект типа AppController, а затем вызову метод setViewController при нажатии кнопки одиночного или двойного плеера, он соответствующим образом изменит представления, но оказалось, что он ничего не делает. Однако когда я вызываю метод setViewController внутри класса AppController, он работает. Поэтому я думаю, что проблема должна быть где-то с доступом к представлению из-за пределов его класса, но я могу ошибаться. Любая помощь будет принята с благодарностью, я потратил много времени, пытаясь понять это, и мне не повезло ни с чем, что я пробовал. Вот мой класс AppController и мой класс начального экрана.
AppController.h:
@interface AppController : NSObject
@property (weak) IBOutlet NSView *mainMenu;
@property (strong) NSViewController *mainViewController;
-(void)setViewController:(NSInteger)viewNumber;
@end
AppController.m:
@implementation AppController
@synthesize mainMenu = _mainMenu;
@synthesize mainViewController =_mainViewController;
NSString *const kStartScreen = @"StartScreenViewController";
NSString *const kOnePlayerMenu = @"OnePlayerMenuViewController";
NSString *const kTwoPlayerMenu = @"TwoPlayerMenuViewController";
int test = 0;
enum{
kStartScreenView = 0,
kOnePlayerView,
kTwoPlayerView
};
-(void)awakeFromNib
{
[self setViewController:0];
}
-(void)setViewController:(NSInteger)viewNumber
{
[[_mainViewController view] removeFromSuperview];
if(viewNumber==kStartScreenView)
{
self.mainViewController = [[StartScreenViewController alloc] initWithNibName:
kStartScreen bundle:nil];
}
else if(viewNumber==kOnePlayerView)
{
self.mainViewController = [[OnePlayerMenuViewController alloc] initWithNibName:
kOnePlayerMenu bundle:nil];
}
else if(viewNumber==kTwoPlayerView)
{
self.mainViewController = [[TwoPlayerMenuViewController alloc] initWithNibName:
kTwoPlayerMenu bundle:nil];
}
[_mainMenu addSubview:[_mainViewController view]];
[[_mainViewController view] setFrame:[_mainMenu bounds]];
}
@end
Стартскринвиевконтроллер.h:
@interface StartScreenViewController : NSViewController
- (IBAction)OnePlayer:(id)sender;
- (IBAction)TwoPlayer:(id)sender;
@end
StartScreenViewController.m:
@interface StartScreenViewController ()
@end
@implementation StartScreenViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
{
}
return self;
}
- (IBAction)OnePlayer:(id)sender
{
AppController *appControllerObj = [[AppController alloc] init];
[appControllerObj setViewController:1];
}
- (IBAction)TwoPlayer:(id)sender
{
AppController *appControllerObj = [[AppController alloc] init];
[appControllerObj setViewController:2];
}
@end