0

所以这是我的问题:

我有一个NSTextView包含很多内容的 an (如果重要的话,黑色背景上的白色前景),驻留在工作表中(由 触发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];
}

该工作表不包含像您这样的文本视图,而是一个表格视图。有时 table view 会完美地执行,但其他时候,它的封闭滚动视图会不完整地绘制它的滚动条,并且在尝试滚动时会有很大的空白区域。

我设法确定只有在-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 回答