【问题标题】:Implement copy: cut: and paste: in macOS app with WebView not working在 macOS 应用程序中实现复制:剪切和粘贴:WebView 不起作用
【发布时间】:2019-01-16 03:27:01
【问题描述】:

我正在开发一个在 macOS 上使用 Objective C 的项目。该项目是基于文档的应用程序。每个窗口都包含一个 WebView。我想实现复制:剪切:和粘贴:这些操作的菜单项应根据 WebView 中选择的对象启用/禁用。我启动了一个新的基于文档的应用程序,并在 AppDelegate.m 中添加了以下代码:

- (void)copy:(id)sender {
    NSLog(@"%@ %s", self, __func__);
}
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {

    NSString *title = [menuItem title];
    NSLog(@"%@",title);
    return YES;
}

在我将 WebView 添加到 Document.xib 文件之前,一切正常,并且正常调用了复制和 validateMenuItem 函数。当我将 WebView 添加到 Document.xib 文件时,这些功能停止工作。我尝试了很多事情(例如覆盖 WebView 类)但没有任何成功。我知道 WebView 已被弃用,但使用 WKWebView 会导致其他问题。

【问题讨论】:

    标签: objective-c macos webview


    【解决方案1】:

    WebView 内的WebHTMLViewcopy: 操作的目标。 WebVieweditingDelegate 可以拦截copy: 动作。实施

    - (BOOL)webView:(WebView *)webView doCommandBySelector:(SEL)selector;
    

    WebViewUIDelegate 可以验证复制菜单项。

    - (BOOL)webView:(WebView *)webView validateUserInterfaceItem:(id<NSValidatedUserInterfaceItem>)item defaultValidation:(BOOL)defaultValidation;
    

    【讨论】:

    • validateUserInterfaceItem 现在在 WebView 委托中被调用并且菜单项现在被启用但是,shouldPerformAction 永远不会被调用
    • 对不起,没测试好。我将编辑我的答案。
    • 谢谢,但仍然没有调用 doCommandBySelector。我在 WebUIDelegate 和 WebView 子类(@interface MyWebView : WebView )中都进行了尝试,并使 MyWebView 成为 Document.xib 中的 WebView 类
    • 我设法通过添加 [self setEditingDelegate:self];到 MyWebView。我不确定这是否是正确的做法?
    猜你喜欢
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    相关资源
    最近更新 更多