1

私のOSXアプリはwebviewを埋め込み、フォント/色/フォントサイズなどを編集するためのカスタムツールバーを表示します。webviewはhtmlをロードし、ユーザーはそれを編集できます。私の質問は次のとおりです。

  1. 選択したテキストのフォント、色、サイズなどのテキスト プロパティを編集する方法
  2. カーソルが置かれているテキストの部分のフォントのプロパティを知る方法は? (ツールバーに表示される情報を変更したい)

WebView には探しているすべての機能を備えた右クリック メニューがあるため、それが可能であることはわかっていますが、ツールバーでこの機能を複製したいと考えています。

ここに画像の説明を入力

テスト目的で、この方法でフォントサイズを設定しようとしていますが、何も起こりません

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

WebView の編集機能に関する Apple のドキュメントは非常に貧弱です (不気味な例)。

アップデート:

選択した HTML を次のコードで取得できます。

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

しかし、私はHTMLを直接操作したくありません... :(

4

1 に答える 1

2

これで、回答に返信できます。エラーはアプローチにあります。WebView は NSText の動作に準拠しているため、WebView が最初の応答者である場合は、フォントや色などを変更するための標準的なアプローチを使用する必要があります。次に例を示します。

テキストの配置を変更します。

TextAlignmentLeft:

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

TextAlignmentCenter:

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

TextAlignmentRight:

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

TextAlignmentJustify:

[[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];
}
于 2013-10-31T12:56:11.690 に答える