1

テーブル ビューが下にスクロールすることに問題があります。解決策を求めてスタック オーバーフローを検索しようとしましたが、何も役に立ちませんでした。

これが私が持っているものです: ユーザーが一番下までスクロールするたびに余分なセルをロードしているテーブルビューがあります。私は次のようにしました:

- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

    if (indexPath.row == ([self.tableView numberOfRowsInSection:0] - 1))
        //load more data..
}

インターネット接続を介してデータが正常に読み込まれた後、[self.tableView reloadData]テーブルを更新してサイズを大きくするように呼び出しています。

ここで問題が発生します。ユーザーがセルを選択すると、詳細ビ​​ュー コントローラーが表示されます。詳細ビューを表示する前に、テーブルがすぐに元のサイズにサイズ変更され、内部のセルの初期数のみが表示されることに気付きました。

詳細ビューが閉じられると、テーブル ビューは元のサイズに戻り (ロードされたデータを調整せずにwillDisplayCell: forRowAtIndexPath:)、すべてのデータの最後までスクロール ダウンする方法がありません。

これらすべての点を確認しましたが、何も役に立ちません:

  • [self.tableView reloadData]テーブル ビューのデータは、 inviewWillAppearメソッドを呼び出すことによって再読み込みされます。
  • テーブル ビューのdelegatedataSourceがコンテナ ビュー コントローラに正しく設定されています。
  • ビューが再び表示されたときに呼び出すことを確認tableView: numberOfRowsInSection:し、持っているすべてのデータの正確な数を返していますが、テーブルのサイズが合計データに適合していないことに問題があります。

また、次のようにテーブル フレームのサイズを変更しようとしました。

CGRect frame = self.tableView.frame;
frame.size.height = self.tableView.contentSize.height;
self.tableView.frame = frame;

しかし、何も変わりません。

何か助けてください??

更新: で異常なことは何もしていませんdidSelectRowAtIndexPath。コードは次のとおりです。

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    DetailsViewController *vc=[[DetailsViewController alloc]initWithNibName:@"DetailsViewController" bundle:nil];
    [self presentViewController:vc animated:YES completion:nil];
}
4

1 に答える 1

0
  1. uiview で uiscrollview のオブジェクトを取得します
  2. uiscrollview で uitableview のオブジェクトを取得する
  3. プロパティ scrollenabled = uitableview の flase を設定します
  4. uiscrollview のデリゲート メソッドを記述する

    - (void) scrollViewDidScroll:(UIScrollView *)scrollView 
    {
            if (scrollView == scrollObj)  {
                    CGFloat scrollPosition = scrollObj.contentSize.height - scrollObj.frame.size.height - scrollObj.contentOffset.y;
                    if (scrollPosition < 30) {
                            if ((!spinnerBottom.isAnimating) || intGetDataCallRunning == 0) {
                                    //[spinnerBottom startAnimating];
                                    //[self getLoginFollowingUserVideosCall];
                                    //run WebService call and after that reload the table or if you have data exists then only reload the table
                                    //and after reloading table follow step no 5.
                            }
                    }
            }
    }
    
  5. テーブルをリロードした後、テーブルの高さを設定してスクロールします

    tblVideo.frame = CGRectMake(0, 0, 320, tblVideo.contentSize.height);
    scrollObj.contentSize = CGSizeMake(320,tblVideo.contentSize.height+60);
    
于 2013-04-16T07:43:42.693 に答える