【问题标题】:How to edit font, size and color for selected text in Cocoa WebView如何在 Cocoa WebView 中编辑选定文本的字体、大小和颜色
【发布时间】:2013-10-28 10:24:28
【问题描述】:

我的 OSX 应用程序嵌入了一个 webview 并显示了一个自定义工具栏,用于编辑字体/颜色/字体大小等。 webview 加载一个 html 并且用户可以编辑它。我的问题是:

  1. 如何编辑所选文本的字体、颜色或大小等文本属性?
  2. 如何知道光标所在文本部分的字体属性? (我想更改工具栏中显示的信息)

我知道这是可能的,因为 webview 具有包含我正在寻找的所有功能的右键菜单,但我想在我的工具栏中复制这些功能:

出于测试目的,我正在尝试以这种方式设置字体大小,但没有任何反应

[_contentWebView changeFont:[NSFont systemFontOfSize:32]];
[_contentWebView setNeedsDisplay:YES];

苹果关于webview编辑功能的文档真的很差(creepy example),当找到关于webview的丰富文档时,有人可以给我推荐一个教程、一本书或其他东西吗?

更新:

我可以使用以下代码检索选定的 HTML:

-(NSString *)getSelectedHtml
{
    DOMRange *ff = [self selectedDOMRange];
    NSString *marki = [ff markupString];
    return marki;
}

但我不想直接操作 html... :(

【问题讨论】:

    标签: macos cocoa webview webkit


    【解决方案1】:

    现在我可以回复我的答案了,错误在于方法,WebView 符合 NSText 行为,因此当 webview 是第一响应者时,您应该使用标准方法来更改字体、颜色等,例如:

    更改文本对齐方式:

    TextAlignementLeft:

    [[self.view.window firstResponder] performSelector:@selector(alignLeft:) withObject:nil];
    

    文本对齐中心:

    [[self.view.window firstResponder] performSelector:@selector(alignCenter:) withObject:nil];
    

    TextAlignementRight:

    [[self.view.window firstResponder] performSelector:@selector(alignRight:) withObject:nil];
    

    TextAlignementJustify:

    [[self.view.window firstResponder] performSelector:@selector(alignJustified:) withObject:nil];
    

    添加或删除粗体和斜体等字体特征:

    case ToolbarToolBold:
    {
    NSButton * dummyButton = [[NSButton alloc] init];
    BOOL enabled = [(NSNumber*)value boolValue];
    [dummyButton setTag:2];
    if(enabled)
    {
        [fontManager addFontTrait:dummyButton];
    }
    else
    {
        [fontManager removeFontTrait:dummyButton];
    }
    }
    break;
    case ToolbarToolItalic:
    {
    NSButton * dummyButton = [[NSButton alloc] init];
    BOOL enabled = [(NSNumber*)value boolValue];
    [dummyButton setTag:1];
    if(enabled)
    {
        [fontManager addFontTrait:dummyButton];
    }
    else
    {
        [fontManager removeFontTrait:dummyButton];
    }
    }
    break;
    case ToolbarToolUnderline:
    {
    [[self.view.window firstResponder] performSelector:@selector(underline:) withObject:nil];
    }
    

    【讨论】:

    • 如果网络视图不是第一响应者,您仍然可以强制将操作发送给它:id oldTarget = [fontManager target]; [fontManager setTarget:webView]; [fontManager addFontTrait:dummyButton]; [fontManager setTarget:oldTarget]; 也适用于modifyFont:
    • 如何确定当前选择是否具有特征? (OSX 如何通过构建系统菜单来做到这一点(它将操作从添加切换到删除))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    相关资源
    最近更新 更多