Mac開發-自定義NSPopover背景色(替換其三角部分)

NSPopover

NSPopover是Mac 10.7 以上的方便彈出控件(10.7之前可以使用這個INPopoverController),需要依賴NSViewController來使用.

最近需要做一個控件,區別就是背景色不一樣,所以想到了替換其背景色實現。


簡單使用

    self.popover = [[NSPopover alloc]init];
    self.popover.appearance = [NSAppearance appearanceNamed:NSAppearanceNameAqua];
    self.popover.contentViewController = //你創建的NSViewController;
    self.popover.behavior = NSPopoverBehaviorTransient;
    [self.popover showRelativeToRect:sender.frame ofView:sender.superview preferredEdge:NSRectEdgeMaxY];

apperance

有以下幾種類別

NSAppearanceNameAqua  10.9之後
NSAppearanceNameDarkAqua 10.14之後

10.10之後
NSAppearanceNameLightContent 
NSAppearanceNameVibrantDark  //變成黑色背景
NSAppearanceNameVibrantLight //默認

彈出樣式 NSPopoverBehavior

typedef NS_ENUM(NSInteger, NSPopoverBehavior) {
    NSPopoverBehaviorApplicationDefined = 0,  
    NSPopoverBehaviorTransient = 1,
    NSPopoverBehaviorSemitransient = 2
};

彈出的效果上沒有什麼區別
NSPopoverBehaviorApplicationDefined 點擊其他地方,不會自動消失。


出現位置

typedef NS_ENUM(NSUInteger, NSRectEdge) {
    NSRectEdgeMinX = CGRectMinXEdge, //按鈕右側
    NSRectEdgeMinY = CGRectMinYEdge, //上方
    NSRectEdgeMaxX = CGRectMaxXEdge, //左側
    NSRectEdgeMaxY = CGRectMaxYEdge, //下面
}

分析圖層結構

NSPopover會將所設置的NSViewController添加到其內容視圖上

例如我們的NSViewController的xib內容如下:
在這裏插入圖片描述
最終的彈出的Popover視圖爲:
在這裏插入圖片描述
綠色部分爲NSViewController.view,紅色部分爲NSPopover的內容視圖,即我們需要修改NSPopover的內容視圖的背景色。

通過superview指針來獲取:

	NSView *popoverView = [[[self contentViewController] view] superview];
    [popoverView setWantsLayer:YES];
    [[popoverView layer] setBackgroundColor:[NSColor colorWithRed:46/255.0 green:53/255.0 blue:59/255.0 alpha:1].CGColor];

最終效果:
在這裏插入圖片描述
代碼地址以及Demo 鏈接:https://pan.baidu.com/s/12JhMecVLhj8LdRuiLt2wCg 密碼:va2y

這樣我們就達到了自定義其背景色的效果


參考文章: https://blog.csdn.net/lovechris00/article/details/77996141
https://stackoverflow.com/questions/19978620/how-to-change-nspopover-background-color-include-triangle-part

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章