首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSViewController viewWillAppear可可

NSViewController viewWillAppear可可
EN

Stack Overflow用户
提问于 2012-08-16 21:31:57
回答 5查看 4K关注 0票数 0

我想在可可MAC应用程序开发中交换视图,比如UINavigationController在可可触摸中的推送/弹出视图。这是一个推送和流行视图的应用程序的要求,不知何故我可以做到这一点,但现在我在项目的中间,我想在可可的viewWillAppear的东西。

EN

回答 5

Stack Overflow用户

发布于 2015-01-09 22:07:57

仅供参考,iOS视图生命周期方法(viewDidLoad、viewWillAppear、viewDidAppear等)从OSX10.10Yosemite(或更高版本)开始可用。

注意事项:如果您计划让应用程序在10.10 OSX之前的版本上运行,请不要实现此类方法,因为它们不会被较早的版本识别(因此不会执行其中的代码)

票数 2
EN

Stack Overflow用户

发布于 2012-08-16 21:54:16

这样的方法在Mac上不可用。与iOS UI相比,OSX有很大的不同。使用-(空)loadView进行初始UI更新(或-(空)awakeFromNib,如果您的UI是在接口生成器中设计并从xib文件加载的),然后在此之后以编程方式发出特定的、按需的UI更新请求,无论何时您调用showWindow、makeKeyAndOrderFront、获取通知、从委托获取回调等。

票数 1
EN

Stack Overflow用户

发布于 2013-11-02 23:27:41

我想出了一些这样的东西:

标题:

代码语言:javascript
复制
@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

实施:

代码语言:javascript
复制
#import "GWView.h"

@implementation GWView

- (void) awakeFromNib {
    [self setNeedsDisplay:TRUE];
}

- (void) addSubview:(NSView *)aView {
    [super addSubview:aView];
    if([aView isMemberOfClass:[GWView class]]) {
        GWView * gview = (GWView *)aView;
        if(gview.viewController && [gview.viewController conformsToProtocol:@protocol(GWViewExtensions)]) {
            if([gview.viewController respondsToSelector:@selector(viewWasAddedToSuperview)]) {
                [gview.viewController performSelectorOnMainThread:@selector(viewWasAddedToSuperview) withObject:nil waitUntilDone:FALSE];
            }
        }
    }
}

- (void) setViewController:(NSViewController *) newController {
    if(_viewController) {
        NSResponder *controllerNextResponder = [_viewController nextResponder];
        [super setNextResponder:controllerNextResponder];
        [_viewController setNextResponder:nil];
    }
    _viewController = newController;
    if(newController) {
        NSResponder *ownNextResponder = [self nextResponder];
        [super setNextResponder:_viewController];
        [_viewController setNextResponder:ownNextResponder];
    }
}

- (void)setNextResponder:(NSResponder *)newNextResponder {
    if(self.viewController) {
        [self.viewController setNextResponder:newNextResponder];
        return;
    }
    [super setNextResponder:newNextResponder];
}

- (void) setBackgroundColor:(NSColor *)backgroundColor {
    _backgroundColor = backgroundColor;
    [self setNeedsDisplay:TRUE];
}

- (void) drawRect:(NSRect) dirtyRect {
    [super drawRect:dirtyRect];
    if(self.backgroundColor) {
        NSGraphicsContext * theContext = [NSGraphicsContext currentContext];
        [theContext saveGraphicsState];
        [[NSGraphicsContext currentContext] setPatternPhase:NSMakePoint(0,[self frame].size.height)];
        [self.backgroundColor set];
        NSRectFill([self bounds]);
        [theContext restoreGraphicsState];
    }
}

- (void) dealloc {
    self.backgroundColor = nil;
}

@end

使用:

代码语言:javascript
复制
#import <Cocoa/Cocoa.h>
#import "GWView.h"

@interface GWDribbbleShotDetailColumn : NSViewController <GWViewExtensions>
@end


#import "GWDribbbleShotDetailColumn.h"

@interface GWDribbbleShotDetailColumn ()
@end

@implementation GWDribbbleShotDetailColumn

- (void) viewWasAddedToSuperview {
    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;
}

@end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11988290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档