这有点长,但我想提供尽可能多的细节。
我创建了一个状态栏应用。我所做的其中一件事就是把它带到了一个"设置"菜单项,如果你点击,NSWindow弹出5个不同的按钮 - 这些按钮绑定到他们自己的自定义NSViewController,这样如果你点击它们,视图控制器会改变,但窗口保持不变,就像任何其他StatusBar app。
在其中一个视图控制器上是一个弹出按钮,其中包含多个用户可选选项。如果我向特定VC(视图控制器)添加一个按钮并将其链接到拉动弹出按钮的选定索引的ibaction,它就可以正常工作(即我选择项目2,它记录项目2)。
现在,事情就在这里。 。 。奇。我创建了一个子菜单,理论上允许用户快速更改链接到我的自定义视图控制器的弹出窗口的选定项目。将此子菜单视为标记为1-4并单击其中一个项目将更改弹出按钮的索引,但每次我尝试此操作并使用NSLog跟进时确保按钮已更改,它始终读为零,换句话说,它永远不会改变。
这是我尝试过的。
就像我曾经使用的所有其他视图控制器一样,我创建了一个视图控制器的新对象(alloc,init),并引用我创建的弹出按钮对象财产。这个编译得很好,但无论选择什么,都只返回零。
我尝试过调用我知道的方法(视图控制器上包含弹出窗口的按钮),但同样,无论选择什么,它都只返回零。
非常感谢任何建议。
tl; dr:无法从app delegate或nsstatusmenu项目更改视图控制器上的弹出按钮,它只会返回零。
编辑:我找到了一个解决方法,因为我可以很好地与我的app委托进行通信,我创建了一个int属性并将其设置为零。从那里,每当我的VC上的弹出按钮发生变化时,我都会更改app delegate int属性的值,并确保每当nib启动时,它都会将所选项设置为app delegate属性。我觉得必须有一种更直接的方式来获取弹出窗口的值并从应用程序委托中更改它。编辑2:根据要求提供一些代码。我意识到我需要使用app delegate中的initwithnibname来指向视图控制器,然后加载视图。这样做允许我拉出弹出按钮中的第一个对象,除非我通过视图控制器本身上的测试按钮这样做,否则无法识别任何后续更改。另外,我在视图控制器的awakefromnib中为弹出窗口添加了值。
searches_VC = [[Searches_ViewController alloc] initWithNibName:@"Searches_ViewController" bundle:nil];
[searches_VC loadView];
NSLog(@"Selected Title: %@",[[searches_VC profilePopupOutlet] titleOfSelectedItem]);