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