MacOS 开发 - NSPopover

原创 2017年09月15日 21:50:09

简介

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)


参考资料

版权声明:本文为博主原创文章,转载请附上本文链接地址。

相关文章推荐

macOS逆向开发之class-dump

一、配置class-dump 1.打开http://stevenygard.com/projects/class-dump下载class-dump-3.5.dmg2.双击class-dump-3.5...

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

这两天突然想看看OSX下的App开发,看了几篇文章。下面这一篇我觉得入门是非常好的。我仅转述为中文,并非原文翻译。原文地址:http://footle.org/WeatherBar/ 下面开始介绍如...

MacOS 搭建Android开发环境

如何在MAC OS X 安装Android SDK我以往用的开发环境都是以MAC OS安装VMware来跑不同的Windows OS,目前慢慢的将所要开发的项目由以往的传统的Wintel转移到Mobi...

macOS 下配置 MAMP 开发环境(Mac + Apache + Mysql + PHP)

macOS 中已经内置了 PHP、Python、Ruby、Perl 等常用的脚本语言,以及 Apache HTTP 服务器,所以使用起来非常方便。本文以最新的 macOS Sierra 10.12 配...

macos/unix下x264开发

macos/unix下x264开发x264新手入门下载x264源码videolan提供下载地址,git安装(没有git的自己装一下),终端进入你想保存源码的目录,输入:git clone git://...

MacOS上Node.js开发环境安装与测试

1.首先我们安装管理工具homebrew。打开终端,输入下面指令。 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/H...

macOS系统下搭建Android开发环境

在开始搭建Android开发环境之前,或者在学习Android开发之前,建议先学习Java入门知识。 Mac OS X系统在10.12.0起正式更名为“macOS”。 下面将从Android SD...

MacOS搭载opencv开发环境

笔者属于Mac小白,最近刚入手一台macbook air,一直没有时间搭建编程环境,这两天终于挤出时间开始使用Mac系统。目前的编程工具主要为eclipse以及xcode,笔者首先选择了使用xcode...

React Native 之搭建开发环境(MacOS用户)

必需软件HomebrewHomebrew, Mac系统的包管理器,用于安装NodeJS和一些其他必需的工具软件。/usr/bin/ruby -e "$(curl -fsSL https://raw.g...

【MacOS开发】HotKey(快捷键)

在MacOS开发中,设置快捷键是必不可少的,这里总结了两种方法。 方法一:在IB中快速设置如果将快捷键设置为MacAPP默认的,用户不可以更改的快捷键,推荐使用这种方法,十分便捷。具体就是在Story...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MacOS 开发 - NSPopover
举报原因:
原因补充:

(最多只允许输入30个字)