WebViewを使用してHTMLエディターCKEditorをCocoaアプリに統合しています。
これまでのところ、1つのことを除いて、期待どおりに機能します。アプリの他の場所でNSColorPanelを開いて色を選択すると、CKEditorでの選択の色が自動的に魔法のように変化します。
これはどのように起こりますか?NSColorPanel(Cocoaウィンドウ)はCKEditor(HTMLウィジェット!)とどのように通信していますか?そして最後に、どうすればこの動作を防ぐことができますか?
コード
WebViewをサブクラス化し、オーバーライドしてCKEditorをロードしていますinitWithFrame:frameName:groupName
。
- (id) initWithFrame:(NSRect)frame frameName:(NSString *)frameName groupName:(NSString *)groupName {
if (self = [super initWithFrame:frame frameName:frameName groupName:groupName]) {
NSURL *baseURL = [[NSBundle bundleForClass:self.class] URLForResource:@"ckeditor" withExtension:nil];
[self.mainFrame loadHTMLString:kCKEditorTemplate baseURL:baseURL];
}
return self;
}
そして、NSColorPanelは次のように開かれます。
- (IBAction)menuColor:(id)sender {
[[NSColorPanel sharedColorPanel] orderFront:self];
}
私がこれまでに見つけたこと
- WebViewクラスリファレンスは、WebViewが以下を実装すると述べています
changeColor:
。
このメソッドはNSColorPanel送信者によって呼び出され、NSTextViewのchangeColor:メソッドと同様に動作します。
しかし、オーバーライドしようchangeColor:
としましたが、呼び出されていません。
- NSColorPanelを使用して選択色を変更すると、CKEditorは
<font>
要素の代わりに要素を追加し<span>
ます(ツールバーを使用してテキストの色を変更した場合と同様)。選択色が従来の方法(おそらく厚紙?)によって変更されないことを意味します。 - NSFontPanelでも同じことが起こります。