点击按钮时,我想显示一张带有电子邮件+密码提示的工作表,其中包含保存和取消选项。 UI已全部设置,操作已就位,工作表显示并按预期取消。问题是我无法在运行时编辑任何一个NSTextField;它们似乎已禁用,并且当工作表打开时,每次按键都会播放操作系统错误声音。我读到UIActionSheet是合适的,但这不是iOS应用程序。
文本字段已启用,之前已在另一个面板中工作。我确保IBAction链接完好无损,但我甚至不确定如何排除故障。
工作表怎么会导致健康的NSTextField拒绝输入?
// show the sheet
-(IBAction)showAccount:(id)sender {
[NSApp beginSheet:accountWindow
modalForWindow:prefsWindow
modalDelegate:self
didEndSelector:NULL
contextInfo:NULL];
}
// cancel/hide the sheet
-(IBAction)cancelAccount:(id)sender {
[NSApp endSheet:accountWindow];
[accountWindow orderOut:nil];
}
编辑:我刚刚发现我可以右键单击并将文本粘贴到每个字段中,但我无法选择或删除。似乎NSTextFields没有获得焦点,也没有像往常那样接收键盘输入。我也忘了提到我的保存按钮调用并正确执行其相关方法。
答案 0 :(得分:80)
事实证明,我随意找到了解决方案,我现在将其发布给后人......
用作工作表(NSWindow或NSPanel)的视图需要有一个标题栏。只要在Interface Builder的检查器中切换它(窗口→外观→标题栏复选框),我重新编译并且NSTextFields突出显示,选项卡式和接受输入,就像在任何其他视图中一样。不知道为什么标题栏有所作为,但你有它。
答案 1 :(得分:38)
视图并非绝对必须有标题栏。
请参阅 Why NSWindow without styleMask:NSTitledWindowMask can not be keyWindow?
哪种状态:如果您希望无标题窗口能够成为关键窗口,则需要创建NSWindow的子类并覆盖-canBecomeKeyWindow,如下所示:
- (BOOL)canBecomeKeyWindow {
return YES;
}
这对我有用。