【发布时间】:2018-10-02 23:21:51
【问题描述】:
我有一个包含 2 个 UITableViews 的滚动视图。换句话说,第 0 页包含 UITableView 0,第 1 页包含 UITableView 1。在视图的顶部,我有一个分段控件。当用户在页面之间滑动时,突出显示的分段控件会发生变化。 IE。当用户在第 0 页并切换到第 1 页时,突出显示的分段控件也会从第 0 页更改为第 1 页。
我的问题是,当当前页面是“第 1 页”并且我垂直滚动 UITableView 时,我的函数将分段控件索引更改为 0。如果用户在第 1 页并且他们在 UITable 上垂直滚动,我不希望更改索引。我已经提供了我的函数来更改下面的分段控制索引。
我尝试在我的 if 语句中包含 && yOffset == 0,但它不起作用,因为我相信 Y == 0 会在短时间内出现。
非常感谢任何帮助。
谢谢。
func scrollViewDidScroll(_ scrollView: UIScrollView) {
var previousPage : NSInteger = 0
let pageWidth : CGFloat = scrollView.frame.size.width
let fractionalPage = Float(scrollView.contentOffset.x / pageWidth)
let page = lroundf(fractionalPage)
let yOffset = Float(scrollView.contentOffset.y / pageWidth)
if previousPage != page {
previousPage = page
}
segments.selectedSegmentIndex = previousPage
segments(nil)
}
编辑 - 解决方案:
Dhaval D. 提供的解决方案完美运行。在执行页面更改之前,请检查滚动是否由 UITableView 执行。感谢您的帮助!
func scrollViewDidScroll(_ scrollView: UIScrollView) {
// Check whether scrolling is performed by UITableView then ignore page counter related stuff
if scrollView != tableView0 && scrollView != tableView1 {
var previousPage : NSInteger = 0
let pageWidth : CGFloat = scrollView.frame.size.width
let fractionalPage = Float(scrollView.contentOffset.x / pageWidth)
let page = lroundf(fractionalPage)
let yOffset = Float(scrollView.contentOffset.y / pageWidth)
if previousPage != page {
previousPage = page
}
segments.selectedSegmentIndex = previousPage
segments(nil)
}
}
【问题讨论】:
-
您的表格视图只能垂直滚动。所以不要添加任何逻辑来改变
scrollViewDidScroll中的分段控件。尝试向包含分段控件的视图控制器添加滑动手势。在该滑动手势中更改分段控件 -
您好,感谢您的回复。我无法通过滑动手势进行识别。我认为这是由于 UIScrollView。有没有我应该尝试实施的特殊方法?我已经尝试过,但以编程方式并通过 IBAction
-
我认为正确的做法是使用
UIPageViewController和分段控制 -
大多数时候,我们可以使用 UIKit 中的标准选项。我认为只是浏览文档以了解可用的内容可能会有所帮助
标签: ios iphone swift uitableview uiscrollview