问题标签 [appkit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - 绑定和目标/动作?
我目前有一个颜色井,可以跟踪保存在 NSUserDefaults 中的颜色。它绑定到一个 NSUserDefaultsController。但是,我也想听听颜色的变化,以便我可以相应地更新我的视图。因此,除了绑定之外,我还向我的首选项控制器添加了一个目标/动作到颜色以及发布带有颜色的通知。
1)同时拥有目标/动作和绑定有多安全?是否有可能会滞后或者它们可能不同步并报告不同的值?
2)当我在我的 IBAction 方法中获取颜色时,我应该从用户默认值还是从颜色中获取它?
这是我的 colorChanged: 操作:
所以我应该这样做:
或者:
谢谢!
cocoa - 自定义 NSPopUpButtonCell drawImage:withFrame:inView 没有被调用
我有一个自定义的 NSPopUpButtonCell,我正在尝试覆盖 drawImage:withFrame:inView。奇怪的是,drawImage 方法从未被调用,但图像出现在屏幕上。我错过了什么?
我已检查以确保我的单元已正确安装——我收到了 drawWithFrame:inView:controlView 消息。
请注意,我正在尝试补偿仅图像的渐变样式按钮未正确将其图像居中(它应该在左侧 1 个像素)。
objective-c - 打开面板出现然后立即消失
我正在使用这段代码:
这是该方法中唯一的代码。调用该方法时,打开的面板会在屏幕上显示一秒钟然后消失。我该如何防止这种情况?
谢谢。
cocoa - 强制 Cocoa App 主菜单的 NSMenu(嵌套子菜单)更新
- 我插入了一些子菜单作为主菜单的窗口项子菜单
- 我有一个我的对象的实例(假设它的类名是 MenuController)从 NSObject 继承并支持来自 NSMenuDelegate 方法的 2:-numberOfItemsInMenu:--menu:updateItem:atIndex:shouldCancel:
- 此实例作为蓝色对象添加到 NIB 中以在运行时唤醒
- 步骤 2-3 中的对象配置为子菜单的委托(步骤 1)
现在,我可以在运行时提供子菜单内容。
接下来,我执行以下操作:我可以添加新项目或从通过协议和委托映射到实际子菜单的数组(在包含菜单标题的 MenuController 内)中删除旧项目。一切正常。除了一件事:我喜欢为我的动态菜单项分配快捷方式。CMD-1、CMD-2、CMD-3 等
窗口/我的子菜单/我的项目1 CMD-1,我的项目2 CMD-2,...
所以,为了调用一些我不想去 Window / MySubmenu / MyItem 用鼠标单击它的项目,我只想按一个快捷方式,比如 CMD-3 来调用该项目。
好的,它会定期按预期工作。但是,一般来说,除了打开 Window / MySubmenu 重新加载其内容外,我无法通知 Main Menu 我的嵌套子菜单更改。重现问题的一种稳定方法 - 只需尝试删除某些项目并按下分配给它的旧快捷方式,在您创建新项目作为已删除的替换后 - 宾果游戏 - 在导航到 Window / MySubmenu 以查看当前子菜单内容之前快捷方式将不起作用.
我不知道强制主菜单重建其子菜单的方法...我尝试过:[[NSApp mainMenu] update] 和使用 NSNotificationCenter 发送 NSMenuDidAddItemNotification、NSMenuDidRemoveItemNotification、NSMenuDidChangeItemNotification 的游戏
我尝试到我的子菜单并显式调用更新方法 - 没有办法......有时 AppKit 调用我的委托方法 - 我看到了,有时它不想调用任何东西。看起来像一个随机策略。
如何确保在“某些调用”之后我的子菜单在内部数组修改后处于实际状态?
objective-c - 零目标动作和事件的响应者链
事件(即 -keyDown: 和 -keyUp:) 是否遵循与 nil 目标操作相同的响应者链?
谢谢。
objective-c - NSMenuItem 与 BOOL 的值绑定
我在将 NSMenuItem 的“值”绑定到 BOOL 时遇到一些问题。
我将问题简化为:
1) 菜单项必须调用更改 BOOL 值的操作方法,否则它不起作用(即,如果 NSButton 调用更改 BOOL 值的方法,则菜单项不会更新)
2) 即使动作方法使 BOOL 成为常量(即enabled = YES
),菜单项的“值”仍然交替出现。
有任何想法吗?我很混乱!
这是代码:
MenuBindings_AppDelegate.h
Menu_BindingsAppDelegate.m
在我的笔尖中,我有一个连接到 -makeYes: 操作的按钮和一个连接到 -toggle: 操作的菜单项。菜单项的“值”绑定绑定到应用程序委托的“foo”属性。
谢谢。
cocoa - 如何以固定宽度获取 NSAttributedString 的高度
我想在固定宽度的框中绘制一些 NSAttributedStrings,但是在计算绘制时它们将占用的正确高度时遇到了麻烦。到目前为止,我已经尝试过:
调用
- (NSSize) size
,但结果是无用的(为此目的),因为它们会给出字符串所需的任何宽度。- (void)drawWithRect:(NSRect)rect options:(NSStringDrawingOptions)options
使用形状为我想要的宽度和选项的矩形进行调用NSStringDrawingUsesLineFragmentOrigin
,就像我在绘图中使用的那样。结果……难以理解;当然不是我要找的。(正如在许多地方指出的那样,包括这个Cocoa-Dev 线程)。创建一个临时的 NSTextView 并做: 当我查询 tmpView 的框架时,宽度仍然是所需的,并且高度通常是正确的......直到我得到更长的字符串,当它通常是所需大小的一半时。(似乎没有达到最大尺寸:一帧将是 273.0 高(大约 300 太短),另一帧将是 478.0(只有 60-ish 太短))。
[[tmpView textStorage] setAttributedString:aString];
[tmpView setHorizontallyResizable:NO];
[tmpView sizeToFit];
如果有其他人管理过这一点,我将不胜感激。
objective-c - 如何重新布局 NSTextView 的内容,以便我的制表符以 4 个字符的宽度绘制
我正在使用 NSTextView,我的要求之一是制表符“\ t”的宽度应与四个空格相同。
所以文本内容看起来像这样:
这就是我如何做到这一点:
这允许适当的布局与初始文本一起显示,并保持输入属性相同。
问题是最终用户可以更改字体。发生这种情况时,示例文本会错位。很像下面的:
我已经尝试调用 myTextView 的 setNeedsDisplay:YES,因为我读到它最终调用了 NSTextView 的 setNeedsDisplayInRect:avoidAdditionalLayout,并且对于 AvoidAdditionalLayout 参数使用了 NO。这并没有改变什么。
当 myTextView 设置了新的 myFont 时,我尝试调用我的 updateMyTextViewTextAttributes 调用。这不会改变任何事情。
我还尝试告诉 myTextView 的 layoutManager 为 myTextView 的 textContainer 确保LayoutForTextContainer。不用找了。
在这一点上,我不确定下一步该尝试什么。有什么建议么?
python - Python 的 AppKit 和 ObjectiveC 代表
AppKit 允许 Mac 上的 Python 程序使用 ObjectiveC 类。我对 ObjectiveC 不是很熟悉,但我想使用 AppKit 访问NSSound类以创建音频播放器。
当当前音频播放完毕时,我的播放器应该执行一些操作,例如从播放列表中加载下一个项目。有一个名为 sound:didFinishPlaying: 的方法,我想它是在那个时候调用的。根据文档,必须设置一个接收此方法调用的委托。
有人可以帮我把它翻译成 Python/AppKit 吗?如何在 Python 中实现委托并让它接收 didFinishPlaying 通知?
cocoa - NSSegmented 控件未选择
我有一个带有纹理圆形样式的 NSSegmentedControl,并且选择模式设置为“任意”。问题是它把它当作选择无。当我将样式切换为胶囊时,它可以正常工作。我在工具栏中使用它,尽管我也在一个视图中(在两台不同的计算机上)测试了它,并且它的行为方式相同。
谢谢您的帮助