- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 OSX 10.6.6 上使用带有最新 SDK 的 Cocoa
我有一个带有自定义工具栏项的 NSToolbar 以及内置字体和颜色的 NSToolbarItem 项(NSToolbarShowFontsItem 和 NSToolbarShowColorsItem 标识符)。
我需要能够在各种情况下启用/禁用它们。问题是 validateToolbarItem:
永远不会为这些项目调用(它正在为我的其他工具栏项目调用)。
文档对此不是很清楚:
The toolbar automatically takes care of darkening an image item when it is clicked and fading it when it is disabled. All your code has to do is validate the item. If an image item has a valid target/action pair, then the toolbar will call NSToolbarItemValidation’s validateToolbarItem: on target if the target implements it; otherwise the item is enabled by default.
我没有为这两个工具栏项明确设置目标/操作,我想使用它们的默认行为。这是否意味着我无法验证这些项目?还是有其他方法可以做到这一点?
谢谢。
最佳答案
经过反复试验,我想我能够解决这个问题并找到合理的解决方法。我将在这里发布一个快速答案,以供将来面临相同问题的其他人引用。
这只是 Cocoa 的又一个设计缺陷。 NSToolbar 具有将 NSToolbarShowFontsItem 和 NSToolbarShowColorsItem 的目标/操作设置为 NSApplication 的硬编码行为,因此文档提示它永远不会为这些 NSToolbarItem 项目调用 validateToolbarItem:
。
如果您需要验证这些工具栏项目,最简单的做法是不要使用默认的字体/颜色工具栏项目,而是使用您自己的工具栏项目,调用相同的 NSApplication 操作(见下文)。
如果使用默认的,可以将它们的目标/ Action 重定向到您的对象,然后调用原始 Action
- (void) toolbarWillAddItem:(NSNotification *)notification {
NSToolbarItem *addedItem = [[notification userInfo] objectForKey: @"item"];
if([[addedItem itemIdentifier] isEqual: NSToolbarShowFontsItemIdentifier]) {
[addedItem setTarget:self];
[addedItem setAction:@selector(toolbarOpenFontPanel:)];
} else if ([[addedItem itemIdentifier] isEqual: NSToolbarShowColorsItemIdentifier]) {
[addedItem setTarget:self];
[addedItem setAction:@selector(toolbarOpenColorPanel:)];
}
}
现在 validateToolbarItem:
将被调用:
- (BOOL)validateToolbarItem:(NSToolbarItem *)theItem {
//validate item here
}
下面是将要调用的 Action :
-(IBAction)toolbarOpenFontPanel:(id)sender {
[NSApp orderFrontFontPanel:sender];
}
-(IBAction)toolbarOpenColorPanel:(id)sender {
[NSApp orderFrontColorPanel:sender];
}
我想设计这个的工程师从来没有想过要验证字体/颜色工具栏项目。去图吧。
关于objective-c - 验证字体和颜色 NSToolbarItem 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4950160/
我遵循了一本名为“Sitepoint Full Stack Javascript with MEAN”的书中的教程,我刚刚完成了第 6 章,应该已经创建了一个带有“数据库”的“服务器”。数据库只不过是
在 Jquery 中,我创建两个数组,一个嵌入另一个数组,就像这样...... arrayOne = [{name:'a',value:1}, {name:'b',value:2}] var arra
这个问题在这里已经有了答案: What is the explanation for these bizarre JavaScript behaviours mentioned in the 'Wa
我被放在别人的代码上,有一个类用作其他组件的基础。当我尝试 ng serve --aot(或 build --prod)时,我得到以下信息。 @Component({ ...,
我正在测试一些代码,并使用数据创建了一个 json 文件。 问题是我在警报中收到“[object Object],[object Object]”。没有数据。 我做错了什么? 这是代码:
我想打印 [object Object],[object Object] 以明智地 "[[{ 'x': '1', 'y': '0' }, { 'x': '2', 'y': '1' }]]"; 在 ja
我有一个功能 View ,我正在尝试以特殊格式的方式输出。但我无法让列表功能正常工作。 我得到的唯一返回是[object Object][object Object] [object Object]
在使用优秀的 Sim.js 和 Three.js 库处理 WebGL 项目时,我偶然发现了下一个问题: 一路走来,它使用了 THREE.Ray 的下一个构造函数: var ray = new THRE
我正在使用 Material UI 进行多重选择。这是我的代码。 {listStates.map(col => (
我的代码使用ajax: $("#keyword").keyup(function() { var keyword = $("#keyword").val(); if (keyword.
我遇到了下一个错误,无法理解如何解决它。 Can't resolve all parameters for AuthenticationService: ([object Object], ?, [o
我正在尝试创建一个显示动态复选框的表单,至少应选中其中一个才能继续。我还需要获取一组选中的复选框。 这是组件的代码: import { Component, OnInit } from '@angul
我正在开发 NodeJs 应用程序,它是博客应用程序。我使用了快速验证器,我尝试在 UI 端使用快速闪存消息将帖子保存在数据库中之前使用闪存消息验证数据,我成功地将数据保存在数据库中,但在提交表单后消
我知道有些人问了同样的问题并得到了解答。我已经查看了所有这些,但仍然无法解决我的问题。我有一个 jquery snipet,它将值发送到处理程序,处理程序处理来自 JS 的值并将数据作为 JSON 数
我继承了一个非常草率的项目,我的任务是解释为什么它不好。我注意到他们在整个代码中都进行了这样的比较 (IQueryable).FirstOrDefault(x => x.Facility == fac
我只是在删除数组中的对象时偶然发现了这一点。 代码如下: friends = []; friends.push( { a: 'Nexus', b: 'Muffi
这两个代码片段有什么区别: object = nil; [object release] 对比 [object release]; object = nil; 哪个是最佳实践? 最佳答案 object
我应该为其他人将从中继承的第一个父对象传递哪个参数,哪个参数更有效 Object.create(Object.prototype) Object.create(Object) Object.creat
我在不同的对象上安排不同的选择器 [self performSelector:@selector(doSmth) withObject:objectA afterDelay:1]; [self per
NSLog(@"%p", &object); 和 NSLog(@"%p", object); 有什么区别? 两者似乎都打印出一个内存地址,但我不确定哪个是对象的实际内存地址。 最佳答案 这就是我喜欢的
我是一名优秀的程序员,十分优秀!