基本上,我正在使用适合的事件制作日历应用。
设置基本上是一个uitableview上方的栏,其中栏有7个部分,一周7天。当您滚动浏览事件时,我希望更改该栏以反映您正在查看的日期。这有点像幻想一样。
当节标题出现在屏幕顶部时,是否有一个被调用的函数?
谢谢!
答案 0 :(得分:1)
假设你有一个名为sectionAtTop
的属性,那么这样的东西应该可以工作:
- (void)setSectionAtTop:(NSInteger)sectionAtTop
{
if (_sectionAtTop != sectionAtTop) {
_sectionAtTop = sectionAtTop;
// update the top bar here with the new section number
}
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:CGPointZero];
self.sectionAtTop = indexPath.section;
}
答案 1 :(得分:1)
对于那些希望将来这样做的人来说,这就是我所做的。 蒂姆的答案没有用,因为即使你滚动,零点总是在表的顶部。所以,我用他的" sectionAtTop"想法
NSIndexPath *indexPath = [[self.tableView indexPathsForVisibleRows]objectAtIndex:0];
sectionAtTop = indexPath.section;
这将获取可见的第一个单元格并为其获取索引路径。这有效,但我需要把它放在一个可以正确更新的地方。我最终把它放在
中- (void)scrollViewDidScroll:(UIScrollView *)scrollView
然而,这造成了另一个问题,因为由于某种原因,在我的单元格被填充之前调用了scrollviewdidscroll,所以它最终导致应用程序崩溃(索引0处没有对象)
所以我创建了一个名为" tableDidLoad"的布尔值。并将其设置为NO。然后,在单元格完成填充的代码底部,我将boolean tableDidLoad设置为true。所以,我的代码看起来像
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (tableDidLoad ) {
NSIndexPath *indexPath = [[self.tableView indexPathsForVisibleRows]objectAtIndex:0];
sectionAtTop = indexPath.section;
[self changeDOW];
}
}
其中changeDOW是使用switch语句调用的函数,该语句执行所需的方法调用。