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

Mat*_*ein 33 cocoa objective-c 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];   
}
Run Code Online (Sandbox Code Playgroud)

编辑:我刚刚发现我可以右键单击并将文本粘贴到每个字段中,但我无法选择或删除.似乎NSTextFields没有获得焦点,也没有像往常那样接收键盘输入.我也忘了提到我的Save按钮调用并正确执行其相关方法.

Mat*_*ein 81

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

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


Sof*_*LLC 39

视图并不一定要有标题栏.

请参阅 为什么NSWindow没有styleMask:NSTitledWindowMask不能是keyWindow?

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

- (BOOL)canBecomeKeyWindow {
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

这对我有用.