0

だからこれは私の問題です:

多くのコンテンツを含む anNSTextViewがあり (それが重要な場合は、黒の背景に白の前景)、Sheet に存在します ( でトリガーされbeginSheet:modalForWindow:ます)。

問題は、スクロールしているときにコンテンツが隠されているように見えることです。

しかし、マウスをスクロールビュー/テキストビューの上に置くと、コンテンツが再び表示されます。

それで、それは何ですか?なぜそれが起こっているのですか?この奇妙な動作を回避するにはどうすればよいですか?


スクリーンキャスト : http://www.screencast.com/t/Sqrk2mdB

4

1 に答える 1

0

あなたの問題のスクリーンキャストを見ましたが、少し前に直面した問題と非常によく似ています。次のようなシートを開始するメソッドがありました(特定の値が存在すると仮定します):

- (IBAction)beginSheet:(id)sender
{
    [[NSApplication sharedApplication] beginSheet:sheet 
                                   modalForWindow:[self mainWindow] 
                                    modalDelegate:self 
                                   didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:) 
                                      contextInfo:self];
}

シートには、あなたのようなテキスト ビューは含まれていませんでしたが、代わりにテーブル ビューが含まれていました。テーブル ビューが完全に機能する場合もあれば、それを囲むスクロール ビューがスクロール バーを不完全に描画し、スクロールしようとすると広大な空白領域が生じる場合もあります。

-beginSheet:セカンダリ スレッドで が呼び出された場合にのみ不安定な動作が発生することがわかりました。

これを改善するために、代わりに次のアプローチを採用しました。

- (void)beginSheetOnMainThread:(id)sender
{
    [[NSApplication sharedApplication] beginSheet:sheet 
                                   modalForWindow:[self mainWindow] 
                                    modalDelegate:self 
                                   didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:) 
                                      contextInfo:self];
}

- (IBAction)beginSheet:(id)sender
{
    [self performSelectorOnMainThread:@selector(beginSheetOnMainThread:) withObject:sender waitUntilDone:YES];
}

テーブルビューは一貫して正しく動作しました。

(後で、メイン キューとブロックで dispatch_async() アプローチを使用することも非常にうまく機能することを知りました。)

これでも特定の問題が解決しない可能性があることを承知の上で、事例証拠についてお詫び申し上げます。しかし、繰り返しになりますが、あなたのスクリーンキャストを見て、私は症状が非常によく知られていることに気付きました.

于 2012-04-18T17:32:55.950 に答える