SourceList 아래에 붙이는 버튼 등의 컨테이너가 되는 OSX10.10에서도 그 이전에도 사용할 수 있는 "히도이"커스텀 뷰
9386 단어 MacOSXObjective-C코코아
OSX 10.10 Yosemite 에서 NSTableView 와 NSOutlineView 의 selectionHighlightStyle 를 NSTableViewSelectionHighlightStyleSourceList 로 바꾸었을 때의 외형이 이전과는 별개가 되었습니다.
글쎄요, 괜찮습니다만, Yosemite 이전에는 소스 리스트의 하부 등에 표시하는 컨트롤의 컨테이너는 커스텀 뷰 클래스를 만들고 소스 리스트의 배경색을 빌려 그려 있었습니다만, Yosemite에서는 NSVisualEffectView 라고 하는 클래스가 준비되어 그것을 이용하게 되었습니다.
Yosemite 이전에도 타겟에 넣고 있으면 OSX의 버전에 의해 교체한다는 알레한 상태가 되어 버렸습니다.
이것은 IB에서 페타페타가 매우 하기 어렵다.
그래서, IB에서 페타 페타 붙여 Yosemite 이전의 구현에 조금 손을 추가하는 것만으로 함, 히도이 커스텀 뷰를 만들었습니다.
히도이지만 움직이기 때문에 좋다! 움직이는 것이 정의! 컴파일러 경고도 없습니다!
(Yosemite는
-initWithFrame:
에만 사용됩니다.)HMSourceListColoredView.h
#import <Cocoa/Cocoa.h>
@interface HMSourceListColoredView : NSView
@end
HMSourceListColoredView.m
#import "HMSourceListColoredView.h"
@interface HMSourceListColoredView ()
@property (strong, nonatomic) NSColor *backgroundColor;
@property (nonatomic, getter=isObservingKeyState) BOOL observingKeyState;
@end
@implementation HMSourceListColoredView
- (instancetype)initWithFrame:(NSRect)frameRect
{
// 使わなくてもイニシャライズはしないとダメです
self = [super initWithFrame:frameRect];
// NSVisualEffectView クラスがあればそのインスタンスを返す
if([NSVisualEffectView class]) {
NSVisualEffectView *view = [[NSVisualEffectView alloc] initWithFrame:frameRect];
return (HMSourceListColoredView *)view;
}
return self;
}
- (void)dealloc
{
if (self.isObservingKeyState) {
[[NSNotificationCenter defaultCenter] removeObserver:self
name:NSWindowDidBecomeKeyNotification
object:[self window]];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:NSWindowDidResignKeyNotification
object:[self window]];
}
}
- (void)viewDidMoveToWindow
{
// NSTableViewを作ってその背景色を拝借する
NSTableView *tableView = [[NSTableView alloc] init];
[tableView setSelectionHighlightStyle:NSTableViewSelectionHighlightStyleSourceList];
_backgroundColor = [tableView backgroundColor];
[self addWindowKeyStateObservers];
}
- (void)addWindowKeyStateObservers
{
if (!self.isObservingKeyState) {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(redisplay)
name:NSWindowDidBecomeKeyNotification
object:[self window]];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(redisplay)
name:NSWindowDidResignKeyNotification
object:[self window]];
}
self.observingKeyState = YES;
}
- (void)redisplay
{
[self setNeedsDisplay:YES];
}
- (void)drawRect:(NSRect)dirtyRect
{
[_backgroundColor setFill];
NSRectFill(dirtyRect);
}
@end
Reference
이 문제에 관하여(SourceList 아래에 붙이는 버튼 등의 컨테이너가 되는 OSX10.10에서도 그 이전에도 사용할 수 있는 "히도이"커스텀 뷰), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/masakihori/items/7ca62352fa8e705f3530텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)