Macos NSViewController视图将显示
我想在cocoa MAC应用程序开发中交换视图,如用于cocoa touch中推送/弹出视图的UINavigationController。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
这是应用程序对推送和弹出视图的一个要求,不知何故,我可以设法做到这一点,但现在我正在进行项目,我希望类似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版本之前运行,请不要实现这些方法,因为它们不会被早期版本识别(因此不会执行其中的代码)