У меня очень сложное переключение между формами в интерфейсах Cocoa. Из моей начальной формы и ее делегата я могу скрыть начальное окно, затем загрузить и отобразить второе окно со всеми его свойствами. Это работает ... Увы, при попытке вернуться в начальное окно, я скрываю второе окно, а начальное не возвращается ...Переключение между окнами Интерфейсы XCode
Вот мои .h и .m для начальной формы и формы. ...
.h
#import <Cocoa/Cocoa.h>
@class frmTwoDelegate;
@interface AppDelegate : NSObject {
@private
frmTwoDelegate *_frmTwo;
}
@property (assign) IBOutlet NSWindow *window;
- (IBAction)BtnSwitchAction:(id)sender;
@end
.m
#import "AppDelegate.h"
#import "frmTwoDelegate.h"
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
...
}
- (IBAction)BtnSwitchAction:(id)sender {
if (!_frmTwo) {
_frmTwo = [[DecriptDelegate alloc] initWithWindowNibName:@"frmTwo"];
[_frmTwo setFrmStart:self];
}
[_frmTwo showWindow:sender];
[_window setIsVisible:NO];
}
@end
Вот .h и .m для frmTwo
.h
#import <Cocoa/Cocoa.h>
@class AppDelegate;
@interface frmTwo : NSWindowController{
@private
AppDelegate *frmStart;
__unsafe_unretained NSTextView *_TxtView;
}
@property (retain) AppDelegate *frmStart;
@property (assign) IBOutlet NSWindow *frmTwo;
@property (unsafe_unretained) IBOutlet NSTextView *TxtView;
- (IBAction)BtnOpenActionPreformed:(id)sender;
- (IBAction)BtnBackActionPreformed:(id)sender;
@end
.m
#import "frmTwo.h"
#import "AppDelegate.h"
@implementation frmTwo
@synthesize frmStart;
- (id)initWithWindow:(NSWindow *)window
{
...
}
- (void)windowDidLoad
{
...
}
- (IBAction)BtnOpenActionPreformed:(id)sender
{
...
}
- (IBAction)BtnBackActionPreformed:(id)sender {
[frmStart ShowWindow];
[_frmTwo setIsVisible:NO];
}
@end
Перед тем как получить ответ, есть пара проблем с отправленным кодом. в методе BtnBackActionPreformed вы ссылаетесь на _frmTwo, который нигде не определен. setIsVisible также не является методом NSWindow или NSWindowController. Поэтому я не уверен, что вы там делаете. Кроме того, это запутывает вызов делегатов классов, когда они наследуют NSWindowController. FormTwoController будет более «Cocoa», чтобы назвать класс вашего контроллера окон. –