3

UITableView を作成し、Web サービスから JSON からデータを取得しています。

Firat、最初に最初の 5 つのオブジェクトを取得し、それらを tableView にロードする必要があります。それはきちんと起こっています。

次に、ユーザーがフッターまでスクロールするたびに..次の5つのオブジェクトを取得し、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

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 に答える
0

最後の行に到達したら、テーブル ビューの行数を増やすことができます。表示するコンテンツがさらにあるかどうかを確認します。表示するコンテンツがさらにある場合は、行数を増やします。

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

行数を増やした後、表示したい目的の行までスクロールできます...

于 2013-01-02T07:24:10.450 に答える