在外观上指定在NSPopover内编辑NSTextField

时间:2012-09-25 23:21:01

标签: cocoa popover nstextfield first-responder nspopover

我正在开发一个提供包含许多NSTextField的NSPopover的应用。虽然我可以像我期望的那样在这些字段之间进行选项卡,但是popover正在选择一个特定的文本字段,当它出现时处于编辑状态,并且它不是我想要编辑的字段;我希望能够以编程方式(或在Interface Builder中)定义在弹出窗口上编辑哪个文本字段。我怎么能这样做?

我通过连接所涉及的所有各种文本字段的IB出口来设置适当的键视图循环,并且我已经将popover的nextResponder属性连接到我想要编辑的文本字段,但是似乎没有效果 - 弹出窗口仍将选择其首选文本字段而不是我的。 Window Programming Guide建议我将窗口的initialFirstResponder出口设置为我想要的视图,但NSPopover不是NSWindow并且没有initialFirstResponder属性(除非我遗漏了某些内容)明显)。

有没有办法在NSPopover出现时指定我想要编辑哪个NSTextField?

2 个答案:

答案 0 :(得分:4)

我想您说过您尝试使用-makeFirstResponder:并传递了文本字段。这将设置窗口firstResponder,但这与initialFirstResponder不同,窗口必须将initialFirstResponder设置为nil以外的其他内容才能尊重关键视图循环。 (Source)稍微调整一下你试过的对我有用的东西:

- (void)popoverWillShow:(NSNotification *)notification
{
    // Set the window's initialFirstResponder so that the key view loop isn't auto-recalculated.
    [[myField window] setInitialFirstResponder:myField];
}

答案 1 :(得分:0)

我认为您可以通过设置您不希望重点关注的所有文字字段来完成这项工作" selectable"而不是"可编辑"在IB中,这应该将您想要开始的一个文本字段留作第一个响应者。然后,在你的popoverDidShow:方法中,将它们全部设置回可编辑状态,你应该可以像往常一样在它们之间进行制表。