ios:当你改变不合适的部分时,是否有一个函数调用?

时间:2014-04-04 23:07:20

标签: ios uitableview calendar

基本上,我正在使用适合的事件制作日历应用。

设置基本上是一个uitableview上方的栏,其中栏有7个部分,一周7天。当您滚动浏览事件时,我希望更改该栏以反映您正在查看的日期。这有点像幻想一样。

当节标题出现在屏幕顶部时,是否有一个被调用的函数?

谢谢!

2 个答案:

答案 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语句调用的函数,该语句执行所需的方法调用。