问题标签 [nscontrol]
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 - 让 NSSlider 以其他方式移动?
我想弄清楚如何在不拖动的情况下进行滑动动作。通常,当我想使用滑块更改值时,我会执行“左键单击滑块字段上的任意位置”或连续“左键单击旋钮并拖动它”。我想做的是在不单击或拖动的情况下将值更改为滑块上“放置鼠标光标”的任何位置,这样只有移动鼠标光标才能更改值。
我已经查找并一直在深入研究 NSControl、NSEvent(MouseDown) 以及 NSslider,我猜 NSControl 中的“mousedown”方法是我想以某种方式修复的方法,但不知道如何做到这一点。
我会很感激答案。非常感谢您提前。
objective-c - NSCollectionView 在 selectable=YES 时窃取焦点
我在 Interface Builder 中创建了一个 NSView,其中包含两个控件,一个 NSCollectionView 和一个 NSTableView。当我的应用程序运行并将此视图附加到窗口时,焦点将正确设置在我的表格视图上并突出显示相应的行。但是,一旦我打电话
焦点将跳转到我的 NSCollectionView 并远离 tableview。让焦点回到我的表格视图的唯一方法是用鼠标单击它。
以下代码行均不起作用
有人有想法么?如果我在 IB 中也将 collectionview 设置为可选,则会发生这种情况。
macos - 关闭 NSWindow 后 UI 元素无响应
上周我花了很多时间摆弄以下问题。我解决了它,但由于我在这里找不到答案,所以我想与遇到此问题的任何人分享我的解决方案。
问题:我的应用程序在后台运行(菜单栏),它的主目录NSWindow
包含我的应用程序的所有首选项。您可以NSWindow
通过单击左上角的关闭按钮来关闭。关闭NSWindow
并重新打开后,所有NSControl
s 都没有视觉响应。这些操作相应地起作用,但它们没有更新。
我尝试了以下方法:
- 在 IB 中取消选中“关闭时释放”
NSWindow
NSWindow
从 NIB重新加载NSControl
所有s 的强大参考- 在s上调用“成为第一响应者”
NSControl
NSView
重新加载所有育儿- 实现所有代表连接每个代表
NSControl
(为每个代表工作NSControl
,但对每个代表都使用它的工作量太大) - 禁用然后重新启用
NSControl
s
我将在下面发布我的解决方案以供记录。
cocoa - 协调一对 NSTextField 控件
我有一个带有两个 NSTextField 控件的窗口,它们的值必须彼此保持同步。具体来说,一个是宽度,另一个是长度,它们的比例应该保持等于给定的纵横比。我希望用户能够设置他们喜欢的任何一个并自动进行其他更新。
我的第一种方法:我将两个控件中的每一个的委托设置为窗口控制器。我实现了 controlTextDidEndEditing 方法。我检查发件人。如果是宽度字段,我会计算高度字段并通过绑定属性 (self.my_height = self.my_width/aspectRatio) 更新其值。同样,如果是高度字段,(self.my_width = self.my_height*aspectRatio)。
但我遇到了障碍。假设纵横比为 1.5。用户在宽度字段中输入 100,然后转到另一个字段。高度字段更新为 66(无论好坏,我选择始终向下舍入)。用户点击高度字段,不做任何改变,然后点击其他地方。宽度字段更新为 99。用户现在正在挠头。
我的细化。我还在窗口控制器中实现了 controlTextDidChange 方法。所有这一切都是将静态(文件范围)BOOL 变量 (gTextFieldDidChange) 设置为 YES。现在,当我进入 controlTextDidEndEditing 时,我检查 gTextFieldDidChange 的状态。如果否,那么我立即返回。如果是,那么我将 gTextFieldDidChange 清除回 NO 并处理长度/宽度更新。
这对我来说似乎没有任何问题,但它似乎相当“后门”。我缺少一种更清洁/更智能的方法吗?
感谢您的任何/所有建议。麦克风
cocoa - 当堆栈视图调整大小时,如何让 NSButton 与 NSStackView 分离?
当堆栈视图调整大小时, 如何NSButton
从一个分离?NSStackView
NSControl
使用NSCell
绘图的子类似乎与其他NSView
子类在自动布局中具有抗压缩性的可见性有不同的想法。
NSStackView
在这里似乎也没有什么不同。
如果我将控件的可见性优先级设置为高于 1,它不会下降。如果我将它设置为 0,那么它当然只会下降,永远不会出现。
这应该如何工作?
当堆栈视图的大小调整为更小时,如何让按钮或其他控件放下?
也许这是文档和示例的缺乏NSStackView
......
objective-c - Objective-C:正确处理子类 NSControl 和 NSActionCell 之间的共享属性?
我一直不确定的一件事是如何正确处理自定义NSControl
子类和NSCell
子类之间的通信。在我对 Cocoa 的介绍中,我看到它多次提到父控件如何提供许多与子单元格/单元格实现相同的方法、访问器和修改器。例如,NSControl
类和类在它们的头文件中NSCell
都有-isEnabled
和:-setEnabled:
NSControl.h
NSCell.h
我了解NSControl
该类为. 我更感兴趣的是:它们是如何实现的?或者更好的是,应该如何实现他/她自己的子类的共享属性?显然,只有 Apple 的工程师才真正知道他们的框架内部发生了什么,但我想也许有人可以阐明以一种非常干净的方式模仿 Apple 的覆盖方法方法的最佳方法。NSCell
我在解释东西方面很糟糕,所以我将提供一个例子来说明我在说什么。假设我已经NSControl
像这样子类化了:
BSDToggleSwitch.h
我已经分类了NSActionCell
:
BSDToggleSwitchCell.h
如您所见,它们都共享一个名为sharedProp
.
我的问题是:有效保持控件和单元格之间的共享属性同步的标准方法是什么?这似乎是一个主观问题,我想是的,但我想认为大多数时候都有“最好的方法”来做到这一点。
过去我使用过各种不同的方法,但我想缩小我处理它的方式,并且只使用能够以最低开销提供最佳数据完整性的技术。我应该使用绑定吗?实现调用其对应方匹配方法的自定义变异器怎么样?KVO?我是一个失败的原因吗?
以下是我过去做过的一些事情(其中一些或全部可能完全古怪或直接错误):
Cocoa Bindings - 我只是将控件的属性绑定到单元格的属性(反之亦然):
这似乎是一个很好的方法,但是您将绑定到/从哪个对象?我已经阅读了所有的 KVO/KVC/Bindings 文档,但是当属性在任何一种情况下都应该相同时,我从来没有真正意识到绑定方向性的重要性。有一般规律吗?
从 Mutators 发送消息- 我会从控件的 mutator 向单元格发送消息:
然后我会在单元的实现中做同样的事情:
这似乎也相当合理,但似乎也更容易出错。如果一个对象在没有值检查的情况下向另一个对象发送消息,那么很容易发生无限循环,对吧?在上面的示例中,我为此添加了检查,但我确信有更好的方法。
观察和报告——我会观察每个对象实现中的属性变化:
再一次,这似乎是可行的,但我不喜欢
if
为每个共享属性写一个语句。根据观察,我也发送了通知,但由于控制单元关系是尽可能“一对一”的(甜蜜的双关语),这看起来很愚蠢。
同样,我知道这有点主观,但我真的很感激一些指导。我学习 Cocoa/Objective-C 已经有一段时间了,这从一开始就困扰着我。了解其他人如何处理控件和单元格之间的属性同步真的可以帮助我!
谢谢!
macos - NSButton mouseDown mouseUp 在启用时表现不同
如果 NSButton 未启用,则 mouseDown: 和 mouseUp: 行为正常(因此当鼠标按下时,mouseDown: 被调用,当它被释放时,mouseUp: 被调用)
但是,如果启用了 NSButton,则根本不会调用 mouseUp:,而在释放鼠标后会调用 mouseDown:
为什么这种行为不同,我如何强制正确的行为(与未启用按钮时相同)
macos - NSTextField 拖动值
我正在尝试在 Mac OSX 环境中创建一个文本字段,允许用户选择一个数字并水平拖动以上下调整该数字。我知道这是可以做到的,因为 Apple 已经在 Sprite Kit 发射器部分的检查器面板中实现了它:见图片
我尝试对 NSTextField 进行子类化以捕获鼠标拖动事件并进行数学运算,但它们似乎没有通过。鼠标按下事件虽然......
我还尝试在顶部放置一个虚拟视图并在事件发生时捕捉事件。这适用于鼠标按下,但同样,鼠标拖动永远不会被调用。我知道该视图可以接收鼠标拖动事件,因为如果我将该视图放置在其下方没有文本字段的某个位置,则一切正常。
我在这里有什么选择?我觉得我已经尝试了一切,剩下的唯一选择就是从头开始创建一个新控件。我不太介意,但我也希望用户能够在文本字段中添加方程式并拖动单个值 - 这意味着需要重建 NSTextField 的全部功能才能添加此拖动功能.. 。 还有别的事吗???
cocoa - 在无标题窗口中禁用所有控件
在我的应用程序中,我的方法中有一个NSWindow
从 .xib 创建的辅助文件。该窗口是一个普通的窗口,标题栏已关闭。NSWindowController
initWithWindowNibName:
NSWindow
创建窗口后,它使用makeKeyAndOrderFront:
-显示,
并且所有控件都被禁用(文本字段、组合框)。
我已经(超过..)三次检查了窗口中的所有标志和控件的视图层次结构:一切都已启用,允许编辑而不是拒绝成为第一响应者。
完全无知。有任何想法吗?
更新#1:
我似乎问题与没有标题栏的窗口有关。当标题栏打开窗口时 - 并且窗口中的控件 - 按预期运行。
objective-c - 在objective-c中获取突出显示的文本
我正在尝试获取光标选择的任何文本(在我的应用程序之外)的 StringValue。我尝试检查 NSControl 类,但没有发现任何有用的东西。