单击按钮更改窗口上的视图

时间:2016-04-10 20:01:01

标签: objective-c xcode cocoa nswindow nsviewcontroller

我基本上想要制作的是一个非常简单的程序,可以在一个窗口的两个视图之间来回切换。

当程序加载时,有一个窗口,其中包含一个包含登录按钮的自定义视图。单击时,视图将更改为包含标签和注销按钮的第二个自定义视图。我有这么多工作。

我无法弄清楚如何让退出按钮将我带回第一个视图。

以下是AppDelegate类的代码,其中我有切换视图的按钮方法:

头:

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate>

@property (weak) IBOutlet NSWindow *window;
@property (weak) IBOutlet NSView *loginView;

- (IBAction)loginButtonClicked:(id)sender;

@end

实现:

#import "AppDelegate.h"
#import "myCustomView.h"


@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // Insert code here to initialize your application
}

- (void)applicationWillTerminate:(NSNotification *)aNotification {
    // Insert code here to tear down your application
}

- (IBAction)loginButtonClicked:(id)sender {
    [_loginView removeFromSuperview];
    myCustomView *new = [[myCustomView alloc]initWithNibName:@"myCustomView" bundle:nil];
    [[[self window]contentView]addSubview:[new view]];
}

@end

这是我的自定义类的代码,它是NSViewController的子类。

头:

#import <Cocoa/Cocoa.h>

@class AppDelegate;

@interface myCustomView : NSViewController

@property (strong) IBOutlet NSView *logoutView;

- (IBAction)logoutButtonClicked:(id)sender;

@end

实现:

#import "myCustomView.h"


@implementation myCustomView

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do view setup here.
}

- (IBAction)logoutButtonClicked:(id)sender {
    [_logoutView removeFromSuperview];
    myCustomView *newController = [[myCustomView alloc]initWithNibName:@"MainMenu" bundle:nil];
    [[[self window]contentView]addSubView:[newController view]];
    //this does not work. No visible @interface for 'myCustomClass' declares the selector 'window'
    }

@end

返回登录页面的按钮方法是我遇到的问题。即使我已将AppDelegate的头文件添加到myCustomClass,我也无法使用NSWindow的实例。我在这做错了什么?我至少走在正确的轨道上吗?非常感谢任何帮助。

我也尝试使用@class代替#import,但仍然无法使用NSWindowAppDelegate的实例。

以下是我的两个xib文件的图片:

[AppDelegate.xib] [1

myCustomView.xib

更新:Paul Patterson在他的评论中提出的建议非常有帮助,但并没有解决我的问题。现在我正在做的让我的项目工作的是将按钮放在窗口而不是视图中,然后在我不需要它们时隐藏它们。这可以工作,我可以来回切换,但我仍然无法弄清楚如何使用自定义视图本身上的按钮将不同的视图加载到同一窗口。

0 个答案:

没有答案