Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos NSViewController视图将显示_Macos_Cocoa_Nsviewcontroller - Fatal编程技术网

Macos NSViewController视图将显示

Macos NSViewController视图将显示,macos,cocoa,nsviewcontroller,Macos,Cocoa,Nsviewcontroller,我想在cocoa MAC应用程序开发中交换视图,如用于cocoa touch中推送/弹出视图的UINavigationController。 这是应用程序对推送和弹出视图的一个要求,不知何故,我可以设法做到这一点,但现在我正在进行项目,我希望类似ViewWill的内容出现在cocoa中。这种方法在Mac上不可用。OSX用户界面与iOS用户界面非常不同。 使用-(void)loadView进行初始UI更新(或-(void)awakeFromNib,如果您的UI是在Interface Builder

我想在cocoa MAC应用程序开发中交换视图,如用于cocoa touch中推送/弹出视图的UINavigationController。
这是应用程序对推送和弹出视图的一个要求,不知何故,我可以设法做到这一点,但现在我正在进行项目,我希望类似ViewWill的内容出现在cocoa中。

这种方法在Mac上不可用。OSX用户界面与iOS用户界面非常不同。
使用-(void)loadView进行初始UI更新(或-(void)awakeFromNib,如果您的UI是在Interface Builder中设计的,并从xib文件加载),然后以编程方式发出特定的按需UI更新请求,无论何时调用showWindow、MakeKeyandDerfront、获取通知、获取代理的回调,等等。

这种方法在Mac上不可用。OSX用户界面与iOS用户界面非常不同。
使用-(void)loadView进行初始UI更新(或-(void)awakeFromNib,如果您的UI是在Interface Builder中设计的,并从xib文件加载),然后以编程方式发出特定的按需UI更新请求,无论何时调用showWindow、MakeKeyandDerfront、获取通知、获取代理的回调,等等。

我使用NSViewController来更改视图,如根据需要将viewController设置为“按按钮单击时打开窗口”,但我发现,一旦为特定的viewController调用(id)init,它就不再为同一个viewController调用。因此,我的UI(视图/MVC)没有更新。我再次强制调用了(id)init,但视图没有刷新。

我使用了NSViewController来更改视图,如根据需要在单击按钮时在窗口上设置viewController,但我发现,一旦为特定的viewController调用了(id)init,它不再调用同一个viewController。因此,我的UI(View/MVC)没有更新。我再次强制调用了(id)init,但视图没有刷新。

我为NSViewController使用了一个特殊视图,它会回调视图控制器。 您可以对代码进行扩展,使其具有ViewWillDisplay之类的方法

- (void)viewWillMoveToWindow:(NSWindow *)newWindow {
    [super viewWillMoveToWindow:newWindow];

    if (self.installed && !newWindow) {
        [self viewWillUninstall];
        NSViewController<SMControllerViewDelegate> *viewController = self.viewController;
        if (viewController) {
            @autoreleasepool {
                [viewController viewWillUninstall];
            }
        }
    }
}

- (void)viewDidMoveToWindow {
    [super viewDidMoveToWindow];

    if (!self.installed && self.window) {
        [self viewDidInstall];
        NSViewController<SMControllerViewDelegate> *viewController = self.viewController;
        if (viewController) {
            @autoreleasepool {
                [viewController viewDidInstall];
            }
        }
    }
}
-(void)视图将移动到窗口:(NSWindow*)新窗口{
[超级视图将移动到窗口:新窗口];
如果(自行安装&&!新建窗口){
[自我检视];
NSViewController*viewController=self.viewController;
if(视图控制器){
@自动释放池{
[viewController viewWillUninstall];
}
}
}
}
-(无效)视图已移动到窗口{
[super ViewDidMoveToWindows];
如果(!self.installed&&self.window){
[自视安装];
NSViewController*viewController=self.viewController;
if(视图控制器){
@自动释放池{
[viewController viewDidInstall];
}
}
}
}

我为NSViewController使用了一个特殊的视图,它会回调视图控制器。 您可以对代码进行扩展,使其具有ViewWillDisplay之类的方法

- (void)viewWillMoveToWindow:(NSWindow *)newWindow {
    [super viewWillMoveToWindow:newWindow];

    if (self.installed && !newWindow) {
        [self viewWillUninstall];
        NSViewController<SMControllerViewDelegate> *viewController = self.viewController;
        if (viewController) {
            @autoreleasepool {
                [viewController viewWillUninstall];
            }
        }
    }
}

- (void)viewDidMoveToWindow {
    [super viewDidMoveToWindow];

    if (!self.installed && self.window) {
        [self viewDidInstall];
        NSViewController<SMControllerViewDelegate> *viewController = self.viewController;
        if (viewController) {
            @autoreleasepool {
                [viewController viewDidInstall];
            }
        }
    }
}
-(void)视图将移动到窗口:(NSWindow*)新窗口{
[超级视图将移动到窗口:新窗口];
如果(自行安装&&!新建窗口){
[自我检视];
NSViewController*viewController=self.viewController;
if(视图控制器){
@自动释放池{
[viewController viewWillUninstall];
}
}
}
}
-(无效)视图已移动到窗口{
[super ViewDidMoveToWindows];
如果(!self.installed&&self.window){
[自视安装];
NSViewController*viewController=self.viewController;
if(视图控制器){
@自动释放池{
[viewController viewDidInstall];
}
}
}
}

我想出了这样的办法:

标题:

@protocol GWViewExtensions <NSObject>
- (void) viewWasAddedToSuperview;
@end

@interface GWView : NSView

//set to the view controller managing this view to get NSResponder udpates,
//and GWViewExtension protocol method calls.
@property (weak,nonatomic) IBOutlet NSViewController * viewController;

@end
使用:

#导入
#导入“GWView.h”
@界面GWDribbbleShotDetailColumn:NSViewController
@结束
#导入“GWDribbbleShotDetailColumn.h”
@接口GWDribbbleShotDetailColumn()
@结束
@GWDribbleShotDetailColumn的实现
-(无效)视图已添加到视图中{
NSRect svb=self.view.superview.bounds;
NSRect sf=self.view.frame;
sf.size.height=NSHeight(svb);
sf.size.width=NSWidth(svb);
self.view.frame=sf;
}
@结束

我想出了这样的办法:

标题:

@protocol GWViewExtensions <NSObject>
- (void) viewWasAddedToSuperview;
@end

@interface GWView : NSView

//set to the view controller managing this view to get NSResponder udpates,
//and GWViewExtension protocol method calls.
@property (weak,nonatomic) IBOutlet NSViewController * viewController;

@end
使用:

#导入
#导入“GWView.h”
@界面GWDribbbleShotDetailColumn:NSViewController
@结束
#导入“GWDribbbleShotDetailColumn.h”
@接口GWDribbbleShotDetailColumn()
@结束
@GWDribbleShotDetailColumn的实现
-(无效)视图已添加到视图中{
NSRect svb=self.view.superview.bounds;
NSRect sf=self.view.frame;
sf.size.height=NSHeight(svb);
sf.size.width=NSWidth(svb);
self.view.frame=sf;
}
@结束

仅为提供信息,iOS视图生命周期方法(viewDidLoad、ViewWillAspect、ViewDidAspect等)自OSX 10.10优胜美地(或以后)开始提供


还有一个警告:如果您计划让应用程序在10.10 OSX之前的版本上运行,请不要实现这些方法,因为它们不会被早期版本识别(因此不会执行其中的代码)

仅出于提供信息的目的,iOS视图生命周期方法(viewDidLoad、ViewWillDisplay、ViewDidDisplay等)自OSX 10.10优胜美地(约塞米蒂)开始提供

还有一个警告:如果您计划让应用程序在10.10 OSX版本之前运行,请不要实现这些方法,因为它们不会被早期版本识别(因此不会执行其中的代码)