我遇到了与这个 SO question类似的问题。我想在 NSSheet 中有一个 webview,我在其中进行一些身份验证以检索 API 令牌。
NSWindowController
我用相应的 xib 文件创建了一个新的子类。这就是我启动 NSSheet 的方式:
- (IBAction)startAuthentication:(NSButton *)sender {
self.authController = [[AuthenticationWindowController alloc] initWithWindowNibName:@"AuthenticationWindow"];
[[NSApplication sharedApplication] beginSheet:self.authController.window
modalForWindow:[self.exportManager window]
modalDelegate:self
didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:)
contextInfo:nil];
}
在此 authenticationWindowController 的 windowDidLoad 回调中,我将 webview 指向 URL:
- (void)windowDidLoad
{
[super windowDidLoad];
[[self.webView mainFrame]loadRequest:[NSURLRequest requestWithURL:authURL]];
}
乍一看,它看起来很棒:如果我按下按钮,startAuthentication
就会调用 action 方法,新窗口会被动画到父窗口中,并且 authURL 会被加载。该网站正确显示,其 HTML 表单包含两个输入字段(用户名和密码)。
问题是,我可以单击页面并且它可以工作,但是如果我试图单击一个文本字段,以便该字段获得焦点,它就不起作用。网站表单的文本字段中没有光标出现,每次击键后我都会听到 NSBeep() 声音。
我对此主题进行了一些研究,并找到了两个参考资料:
让我感到困惑的是,有一个Aperture插件的 Facebook 导出器,它准确地显示了我想要的:模式表中的 web 视图。但是我不知道他们在做什么不同。在 Facebook 导出器中,我没有发现任何直接与运行循环交互的代码。
我的问题
- 这是模式表中 webviews 的已知问题吗?
- 两个参考文献中解释的问题仍然存在吗?
- 我怎样才能得到这个工作?例如,我不明白何时切换运行循环模式。