gpt4 book ai didi

macos - 如何以编程方式调用 NSScrollView 自动滚动方法

转载 作者:行者123 更新时间:2023-12-03 16:02:28 25 4
gpt4 key购买 nike

我有一个简单的聊天应用程序,其中包含基于短信 View 的 NSTableView,如下图所示。 enter image description here每条消息都包含 NSTextView 实例,其高度适合所有文本。

我需要的只是在用户选择文本并将鼠标拖动得足够远时启动 NSScrollView (其中包含 NSTableView 实例)自动滚动。不幸的是,自动滚动没有出现。如果拖动 TextView 之外的某个位置,一切都会成功。

我尝试通过简单地从 NSTextView 中推送 NSEvent-instance 来直接调用 autoscroll:-方法 -subclass "mouse Dragged"-event (就像 this article 中的示例):

- (void)mouseDragged:(NSEvent *)event
{
[self.scrollView autoscroll:event];
}

由于我已经重写了所有鼠标事件并实现了所有文本选择,因此经常调用此方法。但自动滚动似乎不起作用。

更新

我发现在调用 -autoscroll:-方法之前必须有同一个对象的 -mouseDown: 。但它打破了我的文本选择机制。即使不是第一响应者,也必须有 mouseDown: 方法。

最佳答案

通常, TextView 位于其自己的 ScrollView 内。即使它足够大,无需滚动即可显示所有文本,它仍然存在。对该 ScrollView 中的任何内容(可能包括该 ScrollView 本身?)调用 -autoscroll: 只会尝试滚动该 ScrollView ,而不是包含 TableView 的 ScrollView 。

尝试在层次结构中较高的 View 上调用-autoscroll:self.scrollView.superview、表格单元格 View 或表格 View 。

但请注意,即使包含 TextView 的单元格 View 完全显示在屏幕上, TableView 的 ScrollView 也会继续滚动。事实上,它可能会一直滚动到另一个方向离开屏幕。基本上,它不知道您正在尝试在 TextView 中进行选择,因此当选择一直延伸到 TextView 的边缘时,它不知道要停止。

另一种方法可能是尝试使用没有封闭 ScrollView 的“裸” TextView 。我认为 IB 不会让你这样做,所以你必须以编程方式完成。不过,纯 TextView 不能很好地与自动布局配合使用。

关于macos - 如何以编程方式调用 NSScrollView 自动滚动方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30483305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com