是否可以将两个TextView放在一个ScrollView中,以便仅ScrollView滚动而两个嵌入式TextView不能独立滚动? (但是,如果ScrollView滚动,则TextViews应该滚动其中一个,以便显示其余文本。)

谢谢。问候,丹尼尔

编辑:

当前代码http://www.muehlbachler.org/spt.zip

声明我需要什么以及应用程序到目前为止的操作:
一个部分(仅需一部分)是一个简单的端口检查器,它检查端口的范围是被主机打开还是拒绝。为此,在表格的下面有两个主要部分,分别称为“开放端口”和“封闭端口”。在每个主要部分的下面是两个文本视图,其中显示了端口(它们是打开的还是关闭的)。我进行了两次textview,因为如果要查看所有打开/关闭的端口,这是更好的体验,因为这样您就不必经常滚动。
现在的问题是每个textview都可以独立滚动,但这有点讨厌,因为我只想将打开/关闭端口的textview一起滚动。实际上,两个文本视图必须组合在一起,以便它们只能一起滚动。
一个例子:假设您有100个关闭的端口,它们现在被显示为两个文本视图(50:50)。现在,您要快速浏览所有关闭的端口号,(现在)必须滚动两次,因为必须分别滚动textview1和textview2。现在出现了所希望的行为:您只想滚动一次,如果滚动那个时间,则想查看所有关闭的端口(因为两个单独的textview都滚动了)。
我的想法是,我只是将滚动视图放在文本视图之前,然后可以将它们一起滚动,但这是行不通的... :(

编辑:

图片已添加。由于我的声誉,我不允许添加图片,因此我上传了图片:http://www.muehlbachler.org/spt.jpg

最佳答案

在尝试使两个文本视图的滚动位置保持同步时,我采取了稍微不同的方法。我将整体视图的UIViewController设为UIScrollViewDelegate。我将实现一个scrollViewDidScroll:方法,该方法将询问刚滚动的文本视图滚动到的位置,然后告诉另一个文本视图滚动到相同的位置。为了防止这种方法不断重复的循环,我将设置一个标志以在发送滚动消息之前进行检查。如果保证两个文本视图的大小相同,这很容易,但是如果两个文本视图的大小不同,则可能需要做更多的工作。也许滚动位置将以百分比计算。滚动视图可能需要了解内容,然后滚动到特定标题。

可以实现UIScrollViewDelegate中的其他方法,以在用户滚动期间保持同步,这取决于我希望滚动文本视图如何起作用。

回应评论:

听起来百分比计算在这种情况下效果最好。每个滚动视图均具有contentSizecontentOffset属性。另一个视图的偏移可以使用(thisView.contentOffset.x/thisView.contentSize.height) * otherView.contentSize.height计算。

我当时认为,如果在另一个滚动上调用setContentOffset:animated:会触发对该委托的scrollViewDidScroll:方法的另一次调用,则可能需要该标志。检查标志可以停止循环。如果设置了标志,请不要告诉其他滚动视图移动,因为这是反动的scrollViewDidScroll

每次需要重新绘制滚动视图时,都会调用scrollViewDidScroll:。因此,在一次用户交互中,此方法可能被调用数百次。仅此一项就可以使两个滚动视图保持同步。

10-08 08:11
查看更多