我有简单的聊天应用程序和基于文本消息视图的NSTableView,如下图所示。 每条消息都包含NSTextView实例,其高度适合所有文本。
我需要的是启动NSScrollView(其中包含NSTableView实例)自动滚动,同时用户选择文本拖动鼠标足够远。不幸的是,自动滚动并没有出现。如果拖动文本视图之外的某个地方都成功。
我尝试直接调用autoscroll:
- 方法只需按NSEvent
- 来自NSTextView
的实例 - 子类"鼠标拖动" -event(如示例来自{ {3}}):
- (void)mouseDragged:(NSEvent *)event
{
[self.scrollView autoscroll:event];
}
由于我已经覆盖了所有鼠标事件并实现了所有文本选择,因此这种方法经常会调用。但是自动滚动似乎不起作用。
更新
我发现在调用-autoscroll:
- 方法之前,必须有-mouseDown:
个相同的对象。但它打破了我的文本选择机制。这一点甚至不是第一响应者,除了mouseDown:
- 方法之外别无其他。
答案 0 :(得分:2)
通常,文本视图位于自己的滚动视图中。即使它足够大以显示所有文本而不滚动,它仍然存在。在该滚动视图中的任何内容上调用-autoscroll:
(可能包括滚动视图本身?)将仅尝试滚动滚动视图,而不是包含表视图的滚动视图。
尝试在层次结构中较高的视图上调用-autoscroll:
。 self.scrollView.superview
,表格单元格视图或表格视图。
但请注意,即使包含文本视图的单元格视图完全在屏幕上,表格视图的滚动视图也会继续滚动。事实上,它可以继续滚动它到另一个方向离开屏幕。基本上,它并不知道您是否尝试在文本视图中进行选择,因此当选择一直延伸到文本视图的边缘时,它不会知道停止。
另一种方法可能是尝试使用"裸"没有封闭滚动视图的文本视图。我不认为IB会让你这样做,所以你必须以编程方式进行。但是,裸体文本视图在自动布局方面不会很好。