我有几个在接口构建器中创建的NSComboboxes,并且是通过编程性创建的。

在接口构建器中创建的NSComboboxes是完美的。我将其值绑定到共享用户默认控制器,当他们打开视图时,他们坐在那里的值正确。重要的是,该值显示为NSCombobox中的“正常”文本。换句话说,该值未选择。这就是我要的。

对于以编程方式创建的NSCombobox,我使用SelectIteMatIndex:0设置值。当我这样做时,选择了正确的项目 - 但文本 出现 选定。即,它是突出的,一切。我不想要这个。这是我尝试的解决方法:

(i)获取字段编辑器并将插入点设置为文本的末尾。尽管奇怪的是,在执行此操作时,这是无效的。我不确定这是现场编辑器是否正确的行为。

(ii)尝试设置组合框的值的其他各种方法,例如setObjectValue,theStringValuefrom等。

(iii)最后,最令人沮丧的是,我尝试使用[mycombobox setValue:@the default Item forkey:@“ value”]; OBJC_EXCEPTION_THROW失败了,大概是因为没有这样的KVC键。但是我知道组合框的值可以由KVO设置,因为它在接口构建器中起作用!我猜我不知道正确的关键路径。我试图使用内省列举所有属性,但是我无法使代码正确工作(OBJC_PROPERTY_T不在预期的标题中)。

所以,我有两个问题:

首先,有人知道如何以编程方式为nscombobox设置默认值,以便未选择框中的文本?如果涉及到这一点,我将竭尽所能,包括新的NSComboboxcell子类。

其次,有人可以告诉我IB使用什么关键路径或关键路径来设置NSCombobox的值?或者,为什么我为此做出的努力失败了?

我一直在研究这个数小时,我真的被撤消了!


谢谢,Mustisignup!很高兴能解决这个问题。一点点跟进:

(i)选择文本绝对是由焦点引起的。调用setRefusesfirstresponder:是解决问题。不幸的是,该窗口确实希望专注于此组合框,因为设置拒绝firstresponder返回(后来,窗口启动后)再次导致文本选择(我确实希望用户能够在此框上专注于此框,如果他需要)。因此,就我而言,确定的解决方案是调用[窗口makefirstresponder:shothercontrol]。奇怪的是,尽管[窗口makefirstresponder:nil]不起作用。有什么想法吗?

(ii)感谢您指出绑定和属性之间的差异。在研究这个问题时,我学到了很多东西。 For one, I learned that you can get a list of bindings by calling - (NSArray *)exposedBindings, which for NSComboBox returns (fontSize, alignment, toolTip, fontName, enabled, contentValues, fontFamilyName, font, hidden, fontItalic, textColor, value ,内容,可编辑,fontbold)。其次,我能够使用[mycombobox bind:@value'toObject:[nsmutablestring stringwithstring:@“ defaultValue”]使用keypath:@“ string” options:nil],其中nsmutablestring在其中有一个类别,nsmutableString在其中,nsmutableString string withstring:@“ value”。字符串“进入属性。最后,这实际上没有修复文本选择“问题”。使用此组合框和接口构建器中的文本选择之间的区别必须是它们在窗口中的位置...我想这个组合框只是打算成为初始firstresponder,而其他组合则不是。

因此,我唯一剩下的问题可能是为什么[Window MakeFirstresponder:nil]不起作用,无法将注意力集中在组合框中。并不重要,但是如果有人有任何想法,我会很好奇。

有帮助吗?

解决方案

首先,我认为选择文本是因为打电话 selectItemAtIndex: 使Combobox成为Firstresponder。您可以使用 setRefusesFirstResponder:YES 或者,您可以使另一个项目成为第一响应者,以使文本未显示。

如果我正确理解,并且您想更改正确的方法的选择。

其次,您会混淆绑定和KVC。 NSCOMBOBOX有一个 捆绑 称为“价值”,而不是 财产 称为“值”。尝试设置它是毫无意义的 setValue:forKey:, ,界面构建器绝对没有这样做。

您认为这是不可思议和令人困惑的是正确的,也许可以选择更好的名字作为绑定。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top