3

我已经制作了一个 UITableView,并且正在从 Web 服务的 JSON 中获取数据。

Firat,我希望我首先获得前 5 个对象并将它们加载到我的 tableView 中。这是正确的。

然后我希望每当用户滚动到页脚时..接下来的 5 个对象应该被获取并且它应该显示在 tableView..

我被困在这里..谁能告诉我下一步如何进行?

我的 tableview 是否从不同类型的自定义类中加载了所有自定义单元格?

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    if(section==[array count]-1)
    {
        UITableViewCell *cell = [self tableView:mtableview1 cellForRowAtIndexPath:myIP];
        frame =  cell.contentView.frame;
        footerView  = [[UIView alloc] init];
        footerView.backgroundColor=[UIColor clearColor];
        self.activityIndicator = [[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray] autorelease];
        self.activityIndicator.hidesWhenStopped=YES;

        self.activityIndicator.center = CGPointMake(65,50);
        [self.activityIndicator startAnimating];

        UILabel* loadingLabel = [[UILabel alloc]init];
        loadingLabel.font=[UIFont boldSystemFontOfSize:12.0f];
        loadingLabel.textAlignment = UITextAlignmentLeft;
        loadingLabel.textColor = [UIColor colorWithRed:87.0/255.0 green:108.0/255.0 blue:137.0/255.0 alpha:1.0];
        loadingLabel.numberOfLines = 0;
        loadingLabel.text=@"Loading.......";
        loadingLabel.frame=CGRectMake(95,35, 302,25);

        loadingLabel.backgroundColor =[UIColor clearColor];
        loadingLabel.adjustsFontSizeToFitWidth = NO;
        [footerView addSubview:self.activityIndicator];
        [footerView addSubview:loadingLabel];
        [self performSelector:@selector(loadending) withObject:nil afterDelay:1.0];
        [loadingLabel release];

        NSLog(@"%f",mtableview1.contentOffset.y);
        mtableview1.tableFooterView=footerView;

        return footerView;
    }
    return nil; 
}

我一直这样做,但它的位置并不总是正确的。这是我的大问题。

4

4 回答 4

4

您可以使用以下概念。概念是当用户拉表视图然后重新加载附加数据(如拉动刷新)时。

Code Sample :
//MARK: -UIScrollViewDelegate
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    if (scrollView.contentOffset.y <= - 65.0f) {
        // fetch extra data & reload table view
    }
} 
于 2013-01-02T06:43:48.047 回答
0

当您到达最后一行检查是否有更多内容要显示时,您可以增加表格视图中的行数。如果您要显示更多内容,请增加行数。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

增加行数后,您可以滚动到要显示的所需行...

于 2013-01-02T07:24:10.450 回答
0

使用 UIScrollViewDelegate 方法

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{

    }

在 scrollViewDidScroll 方法中,您可以检查行索引以调用您的加载方法

NSIndexPath *indexPath = [[self.myTable indexPathsForVisibleRows]objectAtIndex:1]; //in middle visible of row
int visibleRowIndex = indexPath.row;
于 2013-01-02T06:54:57.633 回答
0

我已经实现了这个请看这是我的代码

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{

    if(footerView == nil)
    {
        footerView  = [[UIView alloc] init];
        CGRect screenBounds = [[UIScreen mainScreen] bounds];

        if (ObjApp.checkDevice == 1)
        {
            UIImage *image = [[UIImage imageNamed:@"LoadMoreBtn.png"]
                              stretchableImageWithLeftCapWidth:8 topCapHeight:8];

            btnLoadMore = [UIButton buttonWithType:UIButtonTypeCustom];
            [btnLoadMore setBackgroundImage:image forState:UIControlStateNormal];
            if(screenBounds.size.height == 568)
            {
                //    iPhone 5
                [btnLoadMore setFrame:CGRectMake(74, 13, 148, 34)];
            }
            else
            {
                //    iPohne 4 and Older iPhones
               [btnLoadMore setFrame:CGRectMake(74, 13, 148, 34)];
            }
        }
        else if (ObjApp.checkDevice == 2)
        {
            UIImage *image = [[UIImage imageNamed:@"LoadMoreBtn_iPad.png"]
                              stretchableImageWithLeftCapWidth:8 topCapHeight:8];

            btnLoadMore = [UIButton buttonWithType:UIButtonTypeCustom];
            [btnLoadMore setBackgroundImage:image forState:UIControlStateNormal];
            [btnLoadMore setFrame:CGRectMake(220, 26, 296, 67)];
        }
        [btnLoadMore.titleLabel setFont:[UIFont boldSystemFontOfSize:20]];
        [btnLoadMore setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        [btnLoadMore addTarget:self action:@selector(btnLoadmore_clicked:)
         forControlEvents:UIControlEventTouchUpInside];
        [footerView addSubview:btnLoadMore];
    }
    return footerView;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    if (ObjApp.checkDevice == 1)
    {
        return 47;
    }
    else
    {
        return 100;
    }
    return 0;
}

#pragma mark - Button Click Methods
-(void)btnLoadmore_clicked:(id)sender
{
    if(page > 0)
    {
        sendpage++;
        if(sendpage<= page)
        {
        [self loading];
        NSString *urlString = [NSString stringWithFormat:@"data={\"name\":\"%@\",\"lat\":\"%f\",\"page\":\"%d\",\"long\":\"%f\"}",txtSearchFld.text,ObjApp.current_Latitude,sendpage,ObjApp.current_Longitude];
        [WebAPIRequest WS_Search:self :urlString];

        CGFloat height = tblSearchResult.contentSize.height - tblSearchResult.bounds.size.height;
        [tblSearchResult setContentOffset:CGPointMake(0, height) animated:YES];
        }
    }
}
于 2013-01-02T09:06:34.187 回答