1

我遇到了与这个 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 导出器中,我没有发现任何直接与运行循环交互的代码。

我的问题

  1. 这是模式表中 webviews 的已知问题吗?
  2. 两个参考文献中解释的问题仍然存在吗?
  3. 我怎样才能得到这个工作?例如,我不明白何时切换运行循环模式。
4

1 回答 1

3

这没有一般问题,我只是再次尝试。必须是除此之外的一些代码吗?你能把它缩小到工作表吗?顺便说一句:我的样本:

https://dl.dropbox.com/u/3753090/test2.zip


但话虽如此,模态运行模式和 webviews / 计时器 / 网络不是很防水 :) 因为:当你通过 NSApp 中的一种便利方法进入模态时,运行循环只能以非常有限的方式运行。:/

于 2013-03-16T22:00:59.790 回答