iOS SDK:一个ScrollView中有两个TextView?

Posted

技术标签:

【中文标题】iOS SDK:一个ScrollView中有两个TextView?【英文标题】:iOS SDK: Two TextViews in one ScrollView? 【发布时间】:2011-06-15 12:14:58 【问题描述】:

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

谢谢。问候,丹尼尔

编辑:

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

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

编辑:

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

【问题讨论】:

表示当你滚动时...... textViews 不应该独立滚动......我正确吗? 好的...现在告诉我你是用 xib 做这个的吗? 是的,我将这些部件添加到 xib 并将其与 IBOutlets 连接,以便我可以在课堂上使用它们。 好的 daniel 现在...将滚动视图放在 xib 中的 textViews 之前 好的,现在是:scrollview -> 2 textviews 【参考方案1】:

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

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

回应cmets:

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

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

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

【讨论】:

好的,我只是在上面的问题中添加了一个简短的问题描述。所以实际上内容并不相等,因为可能一个视图中有 20 行,而另一个视图中大约有 22 行。设置标志是什么意思? 当第一个 texview 完成滚动时,这不只是滚动第二个 textview 吗?上面提到了这个问题,因为第二个的滚动不如第一个慢。 哇,现在它们几乎是同步的......但是另一个自动滚动的文本视图有一些滞后,我如何管理百分比计算,因为第二个文本视图长了 2 行(每次!) ?【参考方案2】:

为什么在滚动视图中需要两个文本视图,那么为什么不只使用嵌入了滚动视图的文本视图来查看其余文本只是滚动文本视图。

【讨论】:

jep,但现在我有两个显示端口号的文本视图。我需要两个 textvews,因为我想划分端口,这样我就不能滚动太多。现在的问题是我可以独立滚动每个文本视图,但我需要两个文本视图应该一起滚动(但不是独立)的行为。事实上,我认为滚动视图应该是实现这一目标的最佳方式? @Daniel M. 使用带有两个部分的 UITableview 怎么样? 好的,但从来没有使用嵌入式表格视图...想象一下(iPad 应用程序):在主机名、端口范围和按钮的顶部文本字段中进行端口检查。下面有两个“主要部分”,分别称为“开放端口”和“封闭端口”。在该标题下方是两个用于显示端口的文本视图(每个主要部分有两个文本视图)。事实上,我有四个文本视图,两个文本视图应该连接在一起以获得更好的体验。此外,文本视图会经常更新(异步端口检查)。 @Daniel M 请张贴截图,以便大家更好地了解您真正想要做什么。 添加了图片链接,因为我不允许直接添加图片。我希望它很清楚。

以上是关于iOS SDK:一个ScrollView中有两个TextView?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iPhone SDK 中单击按钮时水平滚动 ScrollView

UIViewController中有两个scrollView时如何调用UIScrollView的delegate方法

在 iOS 6 上使用自动布局在 ScrollView 中嵌入 ImageView

iOS: 悬浮的条件筛选框使用二

如何在 swift 中增加 ScrollView 中的 UITableView 高度

iPhone/iOS:如何为 Scrollview 的子视图实现拖放?