分割ペインのカスタム ビューの 1 つのサブビューとして、WebView内部にココアがあります。NSSplitPaneこれは、一部の HTML コンテンツのプレビューとして機能します。プレビューの更新時に遷移をスムーズにするには
NSImageViewから作るWebView- を に置き換えます
WebView。NSImageView - 新しい html を
WebView - html の読み込みが完了したら
NSImageView、 を更新済みに置き換えます。WebView
これはコードの要点です:
ヘッダーから
NSImageView *previewImageView;
NSString *content;
@property (strong) IBOutlet NSView *previewContainer;
@property (strong) IBOutlet WebView *previewWebView;
クラスから
- (void)updatePreview
{
previewImageView = [self imageViewFromWebView:previewWebView];
[[previewContainer animator] replaceSubview:previewWebView
with:previewImageView];
[[previewWebView mainFrame] loadHTMLString:content baseURL:nil];
}
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
{
[[previewContainer animator] replaceSubview:previewImageView
with:previewWebView];
}
がファイルでWebView定義され、参照アウトレットが に設定され、フレーム ロード デリゲートが設定されている場合、このコードは正しく機能しません。Web ビューは最初は正しく表示され、イメージ ビューにスワップされますが、元に戻すと表示されません。xibpreviewWebView
WebView代わりにin コードを定義すると
// inside of viewDidAppear
NSRect frame = [previewContainer frame];
NSRect webViewFrame = NSMakeRect(0, 0, frame.size.width, frame.size.height);
previewWebView = [[WebView alloc] initWithFrame:webViewFrame];
[previewWebView setUIDelegate:self];
[previewWebView setFrameLoadDelegate:self];
[previewWebView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
[previewContainer addSubview:previewWebView];
インターフェイスビルダーではなく、スワッピングコードは期待どおりに機能します。WebViewインターフェイスビルダーで定義するときではなく、それを機能させるコード内で定義する方法について何が違うのかについてのアイデアはありますか?