首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有没有一种方法可以把NSToolbarButton和MainViewController连接起来?

在 macOS 应用程序开发中,可以使用 NSToolbar 和 NSToolbarItem 来创建工具栏和工具栏按钮。要将 NSToolbarButton 和 MainViewController 连接起来,可以按照以下步骤进行操作:

  1. 在 MainViewController 中,首先需要创建一个 NSToolbar 实例,并将其设置为窗口的工具栏。可以使用以下代码实现:
代码语言:swift
复制
let toolbar = NSToolbar(identifier: "MyToolbar")
toolbar.delegate = self
window?.toolbar = toolbar
  1. 然后,在 MainViewController 中实现 NSToolbarDelegate 协议的相关方法。其中,最重要的是实现 toolbarAllowedItemIdentifiers(_:)toolbarDefaultItemIdentifiers(_:) 方法,用于指定工具栏按钮的标识符。可以使用以下代码示例:
代码语言:swift
复制
extension MainViewController: NSToolbarDelegate {
    func toolbarAllowedItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
        return [.NSToolbarFlexibleSpaceItem, .NSToolbarSpaceItem, .NSToolbarSeparatorItem, .customButton]
    }
    
    func toolbarDefaultItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
        return [.customButton]
    }
    
    func toolbar(_ toolbar: NSToolbar, itemForItemIdentifier itemIdentifier: NSToolbarItem.Identifier, willBeInsertedIntoToolbar flag: Bool) -> NSToolbarItem? {
        if itemIdentifier == .customButton {
            let buttonItem = NSToolbarItem(itemIdentifier: itemIdentifier)
            buttonItem.label = "Custom Button"
            buttonItem.target = self
            buttonItem.action = #selector(customButtonClicked(_:))
            buttonItem.view = NSToolbarButton(image: NSImage(named: NSImage.Name("CustomButtonImage")), target: self, action: #selector(customButtonClicked(_:)))
            return buttonItem
        }
        
        return nil
    }
    
    @objc func customButtonClicked(_ sender: Any) {
        // 处理自定义按钮点击事件
    }
}

在上述代码中,我们创建了一个自定义的工具栏按钮,并将其添加到工具栏中。可以根据实际需求进行修改和扩展。

  1. 最后,在 MainViewController 的 viewDidLoad() 方法中,将 NSToolbarButton 和 MainViewController 连接起来。可以使用以下代码示例:
代码语言:swift
复制
override func viewDidLoad() {
    super.viewDidLoad()
    
    if let window = view.window {
        window.toolbar?.delegate = self
    }
}

通过以上步骤,你可以将 NSToolbarButton 和 MainViewController 连接起来,实现相应的功能和交互。请注意,上述代码示例是使用 Swift 进行开发的,如果使用其他编程语言进行开发,可以根据语言特性进行相应的调整。

希望以上信息能对你有所帮助!如果你需要了解更多关于 macOS 应用程序开发或其他云计算领域的知识,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

IOS开发之视图视图控制器

UIWindow可以不借助于父类视图显示在屏幕上,其余的视图都需要添加到父视图中才能显示。...我们还可以视图看做是一个视图容器,视图上面还可以添加一个子视图。往父视图中添加的SubView会被放在一个数组中。...控件是一种特殊类型的视图,继承子UIControl超类,通常要绑定回调方法(比如Target-Action回调和委托回调),用于用户交互。控件包括按键,文本框,滑块,切换开关。...4.文本Web视图                 文本web视图为应用程序提供更为高级的显示多行文本的方法。...UITextView类支持在滚动区域内显示编辑多行文本;而UIWebView类则提供显示HTML内容的方法          ?

1.8K70
  • Phonegap 之 iOS银联在线支付(js调用ios端银联支付控件)

    Phonegap项目,做支付的时候,当网站打包到ios或android端成app后,在app上通过wap调用银联在线存在一个问题: 就是当从银联支付成功后,再从服务器返回到app客户端就很难实现。...所以对于手机网站银联支付没有问题,但是对于ios端appandroid端app, 再通过wap支付,发现支付成功后,很难在回到app客户端了。...2、通过Phonegap脚本插件,调用OC代码,OC调用银联支付接口,弹出银联支付控件,输入你的银联卡号手机验证码等信息,完成支付 ? ? ? ?...然后ios端这边可以根据银联返回的支付信息,做自己的业务逻辑处理。 ?...@end #import "MainViewController.h" #import "AppDelegate.h" @implementation MainViewController #pragma

    3.1K20

    IOS开发之记录用户登陆状态

    CoreData适合处理大量的数据,一般TableView来结合起来使用,当然我们可以用CoreData来存储用户的登陆信息,但这不免有点大材小用,而且用起来也是比较复杂的。...那么我们有其他更便捷的方法吗?苹果这么注重用户体验,当然有其他的方法了,就是NSUserDefault....1.首先我们得有一个登陆页面对应的类为ViewController.h, 在登陆页面有两个TextField一个Button用来接受用户的输入,在点击Button中的回调的方法中,如果用户登陆成功,则用户信息存入...        NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];                   //登陆成功后用户名密码存储到...,到此我们就可以实现记录用户的登陆状态了 ?

    1.6K90

    macOS APP从零到上架

    有一款软件叫SimPholders,可以访问iOS开发模拟器的沙盒文件位置,最近,模仿这个功能,开发了一个小型的macOS APP可以一键访问沙盒位置,已经上架到APP Store,记录一下开发过程上架过程...一键直达沙盒:iSandBox-APP Store 0、初始化 xcode新建工程,并且run起来,会发现iOS项目结构类似 AppDelegate:里面有App启动终止的代理方法: - (void...我们一般在ViewController内管理我们自己的View 可以通过代码的方式自定义WindowControllerViewController - (void)applicationDidFinishLaunching...右击Dock栏会有默认菜单列表 如果要自定义右键的菜单列表,则在appdelegate里面添加方法 -(NSMenu *)applicationDockMenu:(NSApplication *)sender...能够获取到模拟器的状态Udid。

    79920

    【IOS开发基础系列】UIViewController专题

    -(void)animateTransition:(id)transitionContext;         在进行切换的时候将调用该方法,我们对于切换时的UIView的设置动画都在这个方法中完成。...跑一下,应该可以得到如下效果:         BouncePresentAnimation的实际效果 3.2 手势驱动的百分比切换         iOS7引入了一种手势驱动的VC切换的方式(交互式切换...的自定义切换效果,当然对与Navigation Controller的PushPop切换也是有相应的一套方法的。...实现起来dismiss十分类似,只不过对应UIViewControllerTransitioningDelegate的询问动画交互的方法换到了UINavigationControllerDelegate...其实从根本来说它们所承担的是两类完全不同的任务:自定义VC容器可以提供自己定义的VC结构,并保证系统的各类方法通知能够准确传递到合适的VC,它提供的transition方法虽然可以实现一些简单的UIView

    58030

    ReactNative应用之汇率换算器开发全解析

    复杂的界面无非是简单组件的组合使用,因此,在进行开发之前,我们可以思考可能需要使用到的独立组件的开发,例如键盘按钮的开发,有键盘按钮组成的键盘的开发,显示屏开发等。...在项目根目录中新建4个目录,分别为const、controller、imageview。这4个目录用于存放后面我们需要新建的静态文件,控制器文件,图片素材视图文件。...至此,键盘部分先告一段落,我们需要对显示屏进行开发,在View文件夹下新建一个ScreenView.js文件,将其作为显示屏视图类,显示屏类键盘比起来要复杂许多,因为其要实现各种屏幕操作功能,例如回退...this.refs.screenView.buttonClick(title); } } } 到此,ReactNative应用汇率转换器的核心功能已经全部完成了,此应用只有一个界面,其实我们已经可以直接将...MainViewController(); return controller.view(); } } AppRegistry.registerComponent('News', ()

    2.9K20

    Data First的时代,利用数据产生商业模式创新的五种方法

    爱因斯坦说过,创意就是不同的东西结合在一起。 ? 创新的本质是连接,将不同的数据组合在一起,通过一定的方法,产生新的数据,产生洞察,去影响行为就是创新。...P2P,是将标的物闲置资金联系在一起。 谁能够产生更多的连接点,并且将其与更多的连接点连接起来,谁就具有更多的创新能力。...第二种基于数据的模式创新方法是通过分析利用一个产品产生的数据,产生了新的业务价值,能够提供创新服务给到用户。...凯哥用一句话形容,是"卖羊的数据共享给猪,让猪牛还有羊都受益"。 数据连接产生的价值网络创新 ?...数据全景图不是你有什么数据,而是你应该会产生应用数据的全集,也就是跟你的业务有关系的所有的数据。 第三,我们介绍了五种数据驱动的商业模式,创新的方法

    1.1K10

    那些年我们一起用过的Hybrid App

    再去执行相应的方法,就可以了。...因此要完成JS在Web App开发当中的最佳实践,肯定要学习优秀的思想实现方法了。在这篇文章里面,笔者们暂时先不去做这种深入的讨论。...为了解决Canvas性能的问题,越来越多的人和应用厂商(尤其是浏览器厂商),提供一种解决方案就是希望将Canvas API系统底层的API打通。...所以要认清跨平台这个"幌子",并非所有的问题都用同一个方法处理。笔者们要融汇贯通嘛! 总结笔者的感受 对于做Web App的坑,其实挺多的。这里无法一一表达。...每一种语言都会有其中的思想,每一种工具都有自己解决问题的方法论。多尝试就能够给自己带来更优秀的架构,更优秀的应用,提供给用户更好的体验。当然,也会有更好的回报。

    1.3K80

    DZNEmptyDataSet,优秀的空白页或者出错页封装

    简介 项目主页:https://github.com/dzenbot/DZNEmptyDataSet 提示:主要用于UITableViewUICollectionView,也可以用于UIScrollView...,其实主要是前两个会用到空白或者网络出错页 采用给UIScrollView添加代理方法来给页面添加空白页,源码很有学习意义 导入工程 自动, pod 'DZNEmptyDataSet' 手动 https...DZNEmptyDataSet 下载解压,Source文件夹下的文件拖入工程 导入头文件: #import "UIScrollView+EmptyDataSet.h" 初始化 @interface MainViewController...self.tableView.emptyDataSetSource = self; self.tableView.emptyDataSetDelegate = self; //这行代码必须加上,可以去除...tableView的多余的线,否则会影响美观 self.tableView.tableFooterView = [UIView new]; } 满足代理方法可以分别配置,都是可选的

    1.7K60

    一线开发者本周复盘

    Android TextView 实现: tvPrice.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); 可以看到就是设置一个 FLAG 就可以了。...一般有两种思路: 第一种就是直接利用搜索引擎,看看有没有其他人踩过坑。 第二种就是直接看源码。 本着这个是小问题,而且看源码可能解决起来比较快,我们就看下源码。....** @param flags The new flag bits for the paint 可以看到是设置标志的值。 因此我们上面的代码后面设置的删除线标志值反锯齿标志位清除了。...只需要设置一次 Flag 即可,然后通过位运算 | 将多个标志位连接起来。...其实读者应该发现了,上面二脸懵逼误打误撞的代码其实也是另一种解决方法,不过要注意顺序,还要对方法有所了解,所以还是推荐上面的解决方法哈~ 单词本 curly braces 花括号 underscore

    31120

    数据结构——树、森林二叉树的转换

    在介绍树的存储结构时,就说到了树的孩子兄弟表示法可以将一棵树用二叉链表进行存储,所以借助二叉链表,树二叉树可以互相转换。从物理结构上来看,它们的二叉链表也是相同的,只是介绍不太一样而已。...因此,只要我们设定一定的规则,用二叉树来表示树,甚至表示森林都是可以的,森林二叉树也可以互相进行转换。...步骤不如: 每棵树转换为二叉树; 第一棵二叉树不动,从第二棵二叉树开始,依次后一棵二叉树的根结点作为前一刻二叉树的根结点的右孩子,用线连接起来。...二叉树转换为森林 判断一棵二叉树能够转换为一棵树还是森林,标准很简单,那就是只要看这棵二叉树的根结点有没有右孩子,有的就是森林,没有的就是一棵树。...树、森林看似复杂,其实它们都可以转换为二叉树来处理,我们研究了树、森林二叉树的互相转换的办法,这样就使得面对树森林的数据结构时,编码实现称为了可能。

    51720

    从 IP 到 IP,聊聊计算机网络中那些“没用的”知识

    这篇文章就浅谈下 IP IP 之间的通信的知识。 不同类型的网络 不同的计算机连接起来可以做数据通信,可以共享软件、硬件,这就叫做计算机网络。 这种连接方式有很多种,自然也就有不同的网络。...比如这样: 这种通过一根线所有的计算机连接起来的网络连接方式叫做以太网。...电信卫星的网络不咋用关注,我们还是继续讲以太网: 多台计算机已经用网线连接起来了,那怎么通信呢?...互联网 现在一个个的网络都是分散的,不管是以太网,还是用电信网络连接的网络,或者是卫星连接的网络,那自然有需求这些分散的网络给连接起来,这就是互联网,也就是网络连接起来的网络。...如果第一段当作网络号,那剩下的三段就是主机号,可以标识 1600 多万台计算机,如果前两段当作网络号,那可以标识 6 万多台计算机,如果前三段当作网络号,那只有最后一段用于标识主机,可以标识 254

    35420

    iOS 开发之实现 App 消息推送(最新)

    付费环节都需要用到,也只需按照苹果要求来写就好了。...第五部分:生成Provisioning Profiles 这个配置概要文件分为两种,一种是为开发使用的,还有一种则是为发布到appStore上面。...接下来我们打开终端将他们生成.pem文件 1.aps_development .cer文件生成.pcm文件,cd到push文件夹下 2.push.p12文件生成为.pem文件 上边输入的密码则是你导出证书所设的密码...这样我们在push文件夹中就又得到了两个文件,PushChatCert.pemPushChatKey.pem。...3.PushChatCert.pemPushChatKey.pem合并为一个pem文件, 在push文件夹中又多了一个ck.pem文件,以上我们需要使用的文件都准备好了 接下来就要测试一下啦,是不是很激动

    4.8K30

    开发 | Facebook 的“自然语言理解”如何让Messenger更懂人类?(6500字演讲全文)

    这里我想强调一下,人类可以很容易地理解这段对话,实际上我们3个人用了3种不同的方式来表达时间。 Facebook的目标方法 ?...这里是一张这种表示方法的示意图,里面的蓝色粉色点就是单词。可以看到,几个球类运动的名称挨得比较近,其它概念性的词虽然也跟运动相关,但是离得就要远一些。 ?...我们实际的措施,基本上是基于卷积网络的,这是一种很自然的吸收组合上下文的方法。...在这场演讲的开头,Benoit说我们真正的目标是通过各种各样的应用,借助数百万计的内容人和人连接起来。...今天的Facebook已经做得很好的事情,是通过利用社交信息流,借助你朋友们所说的话、所做的事内容连接起来。我们很想要拓展这件事情,想要把你这世界中你感兴趣的数百万计的内容也连接起来

    91690

    iOS开发之自定义表情键盘(组件封装与自动布局)

    在使用该组件时要传入要显示的图片图片对应的文字(如【哈哈】),当点击图片的时候,会通过block回调的形式该图片的image以及图片文字返回到使用的组件中去,下面是关键代码:       FaceView.h...中的代码如下(下面代码是定义啦相应的Block类型对外的接口): 1 #import 2 3 //声明表情对应的block,用于点击的表情的图片图片信息传到上层视图...组件表情加载进来,在实例化FunctionView组件时,我们用到了自动布局来设置ScrollView下面的Button       FunctionView.h的代码如下,在.h中留有组件的接口回调用的...三.Controller部分,上面的组件进行组装     1.MainViewController.m中的延展部分的代码如下: 1 @interface MainViewController ()...//设置资源加载的文件名 14 self.functionView.plistFileName = @"emoticons"; 15 16 __weak __block MainViewController

    1.8K100
    领券