尝试以编程方式创建UITableView滚动

时间:2013-06-06 18:51:56

标签: ios uitableview uiscrollview

我有一个UITableView,其中包含一个UIImageView,它根据用户按下的两个按钮向上/向下滚动。

UITableView屏幕上有一个可见区域,不会显示表格中的所有行。

我的UIImageView一次向上/向下一行,但不幸的是,当它转到用户看不到的行时,它会离开屏幕。

我想要做的是让表格自动向上/向下滚动一行,每次用户向上移动UIImageView向上/向下一行离屏。

最终,一旦用户到达列表的末尾,如果用户位于表格的最顶端,那么我将UIImageView移动到UITableView的最底部(即移动到最后一行),这意味着该表应向上滚动并显示表格中的最后一行。

反过来也应该是真的(即如果UIImageView位于列表的最底部,那么按下向下按钮应该将用户带到表格的最顶部,并且表格应该自动滚动到列表的最开头,将表中的第一行显示给用户)。

以下是移动UIImageView中的UITableView的代码:

- (IBAction)buttonClicked:(id)sender {

    if([sender tag] == 1){

        if (_index.row == 0) {

            _index = [NSIndexPath indexPathForRow:[_tableData count] - 1 inSection:_index.section];
            //here is my code that controls the scrolling of the table
            [_table scrollToRowAtIndexPath:_index atScrollPosition:UITableViewScrollPositionTop animated:YES];

        }

        else
            _index = [NSIndexPath indexPathForRow:_index.row - 1 inSection:_index.section];

        [UIView animateWithDuration:.3 animations:^{
            CGRect rect = [self.view convertRect:[_table rectForRowAtIndexPath:_index] fromView:_table];

            CGFloat floatx = _imageView.frame.origin.x - rect.origin.x;
            _imageView.frame = CGRectMake(rect.origin.x + floatx, rect.origin.y, _imageView.frame.size.width, _imageView.frame.size.height);
        }];

    }

    else if([sender tag] == 2){

        if (_index.row + 1 == [_tableData count]) {

            _index = [NSIndexPath indexPathForRow:0 inSection:_index.section];
            //here is my code that controls the scrolling of the table
            [_table scrollToRowAtIndexPath:_index atScrollPosition:UITableViewScrollPositionTop animated:YES];

        }

         else
             _index = [NSIndexPath indexPathForRow:_index.row + 1 inSection:_index.section];

        [UIView animateWithDuration:.3 animations:^{
            CGRect rect = [self.view convertRect:[_table rectForRowAtIndexPath:_index] fromView:_table];

            CGFloat floatx = _imageView.frame.origin.x - rect.origin.x;
            _imageView.frame = CGRectMake(rect.origin.x + floatx, rect.origin.y, _imageView.frame.size.width, _imageView.frame.size.height);
        }];

    }

}

任何人都可以看到我在这里做错了吗?

0 个答案:

没有答案