无法在运行时在工作表中编辑NSTextField

时间:2011-09-26 21:08:36

标签: objective-c cocoa nstextfield

点击按钮时,我想显示一张带有电子邮件+密码提示的工作表,其中包含保存和取消选项。 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没有获得焦点,也没有像往常那样接收键盘输入。我也忘了提到我的保存按钮调用并正确执行其相关方法。

2 个答案:

答案 0 :(得分:80)

事实证明,我随意找到了解决方案,我现在将其发布给后人......

用作工作表(NSWindow或NSPanel)的视图需要有一个标题栏。只要在Interface Builder的检查器中切换它(窗口→外观→标题栏复选框),我重新编译并且NSTextFields突出显示,选项卡式和接受输入,就像在任何其他视图中一样。不知道为什么标题栏有所作为,但你有它。

答案 1 :(得分:38)

视图并非绝对必须有标题栏。

请参阅     Why NSWindow without styleMask:NSTitledWindowMask can not be keyWindow?

哪种状态:如果您希望无标题窗口能够成为关键窗口,则需要创建NSWindow的子类并覆盖-canBecomeKeyWindow,如下所示:

- (BOOL)canBecomeKeyWindow {
    return YES;
}

这对我有用。