关闭

MacOS 开发 - NSPopover

标签: NSPopoverMacOSNSAppearan
2360人阅读 评论(2) 收藏 举报
分类:

简介

Mac 中常见点击状态栏图标,或者点击按钮,会出现带尖角的视图,就是 NSPopover。

创建和使用

下面直接展示代码让大家了解怎么使用:
1、为了省时,直接拉取 NSButton 到 xib , 并将按钮拖线到 .m文件,写下 - (IBAction)btn0OnClick:(id)sender {} 方法。

2、创建 FirstViewController.h 继承自 NSViewController, 建议勾选同时创建 xib。
这个控制器就是 popover 中显示的内容。我们也可以把 NSPopover 理解为一个容器。

3、在 .m 文件中,创建两个属性,并进行懒加载。
不喜欢懒加载的小伙伴,也可以用我的懒加载自动生成工具:
http://blog.csdn.net/lovechris00/article/details/77448356

@property(nonatomic,strong) NSPopover *firstPopover;
@property(nonatomic,strong) FirstViewController * firstVC;

- (NSPopover *)firstPopover
{
    if(!_firstPopover)
    {
        _firstPopover=[[NSPopover alloc]init];

        _firstPopover.appearance = [NSAppearance appearanceNamed:NSAppearanceNameAqua];

        _firstPopover.contentViewController = self.firstVC;
        _firstPopover.behavior = NSPopoverBehaviorTransient;

    }
    return _firstPopover;
}

- (FirstViewController *)firstVC
{
    if(!_firstVC)
    {
        _firstVC=[[FirstViewController alloc]init];
    }
    return _firstVC;
}

4、在按钮方法中调出这个 popOver

- (IBAction)btn0OnClick:(id)sender {

    NSButton *button = sender;
    //显示在button 下面
    [self.firstPopover showRelativeToRect:[button bounds] ofView:button preferredEdge:NSRectEdgeMaxY];

}

5、为了丰富 弹窗的内容,你可以往 FirstViewController.xib 中添加内容测试。


细节

如何控制 popover 窗口大小?

答:调整 popover 中控制器的大小即可,比如我调整了 xib 的尺寸。

pop


NSPopover 的 appearance

系统定义了四种 Standard Appearances

NSAppearanceNameAqua 
NSAppearanceNameLightContent 
NSAppearanceNameVibrantDark 
NSAppearanceNameVibrantLight //默认

效果直接上图了:

NSAppearanceNameAqua

NSAppearanceNameLightContent

NSAppearanceNameVibrantDark

NSAppearanceNameVibrantLight


弹出样式 NSPopoverBehavior

typedef NS_ENUM(NSInteger, NSPopoverBehavior) {
    NSPopoverBehaviorApplicationDefined = 0,  
    NSPopoverBehaviorTransient = 1,
    NSPopoverBehaviorSemitransient = 2
};
  • 弹出的效果上没有什么区别
  • NSPopoverBehaviorApplicationDefined 点击其他地方,不会自动消失。

出现的方位 NSRectEdge

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

}

补充

前任遇到一个坑:
http://www.jianshu.com/p/e00ddf1e8475
问题:“今天开发 iTips,遇到一个很诡异的问题:NSOutlineView 中的 NSTableCellView 中的 NSTextField,始终有一个背景色,无论怎么设置都无法去掉。”
原因:“才发现NSPopover 默认使用 NSAppearanceNameVibrantLight 这种样式,因此带来问题:NSTextField 使用透明背景色,进而就会取 NSPopover 中的背景色,就是图中的问题。”

解决方案:只要将 NSPopover 的主题改为 NSAppearanceNameAqua 即可:

self.view.appearance = NSAppearance(named: NSAppearanceNameAqua)


参考资料

0
0
查看评论

MAC NSPopover

下面通过NSStatusBar出发 NSPopver。 创建 NSStatusBar//获取系统单例NSStatusBar对象 NSStatusBar *statusBar = [NSStatusBar systemStatusBar]; //创建固定宽度的NSStatusItem...
  • tongwei117
  • tongwei117
  • 2017-05-05 10:53
  • 422

MacOS 开发 - NSMenu 添加菜单栏

添加顶部目录 简单常用的一级目录 添加二三级目录 添加 Dock 菜单 状态栏NSStatusItem添加菜单 给一个NSView添加右击菜单 小结 参考资料添加顶部目录简单常用的一级目录- (void)addMenu{ //获取主目录 NSMenu *mainMenu = [NSAp...
  • lovechris00
  • lovechris00
  • 2017-09-16 11:14
  • 2630

NSPopover使用

- (IBAction)alertButton:(id)sender {     mypopoverView = [[MyPopoverViewController alloc] initWithNibName:@"MyPo...
  • qq_27740983
  • qq_27740983
  • 2015-12-16 17:03
  • 1518

Popover 初探

Popover 是一个新型的弹出窗口。  apple 文档里面这样说:  NSPopover类提供了一种方法在现有相关内容在屏幕上显示更多的内容。Popover窗口定位相对于现有内容。 锚点(anchor )是用来表示这两个单元的内容之间的关系。Popover窗...
  • xianlaowu
  • xianlaowu
  • 2015-10-26 23:19
  • 608

NSPopover

NSPopover类似于iOS中自定义的popview也是点击一个button会弹出一个弹窗。 首先在xib中拖放两个NSPopover放到面板中,然后再分别拖动点击方法到控制器。 第二步就是在控制器中声明两个NSPopover变量,这样与拖放的两个NSPover相对应。 第三步就是分别懒加载...
  • tongwei117
  • tongwei117
  • 2017-10-16 22:16
  • 84

macOS 开发入门教程: Part 1

原文:macOS Development for Beginners: Part 1 作者:Sarah Reichelt 译者:kmyhy 你想开发自己的的 macOS App 吗?好消息!苹果让 macOS 开发变得超级简单,这个系列教程会教你如何进行 macOS App。你将学习如何...
  • kmyhy
  • kmyhy
  • 2017-06-22 09:01
  • 1903

MacOS 开发入门

引言 相关书籍 剑指人心的书 Cocoa入门使用Objective-C 视频教程 我的开发笔记CSDN 博客目录 基础控件 DockWindow状态栏目录栏 文件管理等 视图效果 小功能 综合 我的MacOS 开发简书文集 实用Demo 优秀MacOS 开发博客 QQ群 参考资料 ...
  • lovechris00
  • lovechris00
  • 2017-05-27 10:24
  • 5346

MacOS 开发 - NSDatePicker(日期选择)

使用 NSDatePicker 就可以调出日期选择,结果图如最下。注意事项 创建 枚举 NSDatePickerStyle NSDatePickerElementFlags 效果图 参考资料 注意事项 建议把这个 picker 作为全局变量,这样就不会每次点击按钮都添加。 使用setAction 监...
  • lovechris00
  • lovechris00
  • 2017-09-08 17:44
  • 2220

使用Swift开发一个MacOS的菜单状态栏App

这两天突然想看看OSX下的App开发,看了几篇文章。下面这一篇我觉得入门是非常好的。我仅转述为中文,并非原文翻译。原文地址:http://footle.org/WeatherBar/ 下面开始介绍如何使用Swift开发一个Mac Menu Bar(Status Bar) App。通过做一个简单的天...
  • yanghuiliu
  • yanghuiliu
  • 2016-07-28 12:11
  • 6874

iOS Mac本地服务器moco服务端并进行网络请求实战

声明:本文参考文章如下:http://www.jianshu.com/p/cb7eb3bf272c http://www.jianshu.com/p/638da64422a0 http://www.jianshu.com/p/b22b9ddfa9c0 https://github.com/dream...
  • Xoxo_x
  • Xoxo_x
  • 2017-08-12 18:31
  • 1127
    博客专栏
    个人资料
    • 访问:210153次
    • 积分:3453
    • 等级:
    • 排名:第11457名
    • 原创:127篇
    • 转载:6篇
    • 译文:1篇
    • 评论:96条
    最新评论