0

私を夢中にさせている問題があります。

常に編集モードになっている UITableView があります (そうである必要があります)。

ユーザーはそれに新しい行を追加できます。

tableViewController の navigationItem.leftbarButton は、それを行うためだけに新しいコントローラーをプッシュします。これを「newRowsVC」と呼びましょう。

newRowsVC のデリゲートとして設定された tableViewController をプッシュする前に、プロトコルにはメソッドしかありません。

-(void) aNewRowHasBeenCreated
{
  [self.tableView reloadData];
}

行の追加を開始すると、すべて正常に動作します。画面の領域がなくなるため、最後の新しい行が tableView を強制的にスクロールするまで、各行がtableViewController にすぐに表示されます。ここでは、tableView だけがフリーズし、スクロールバーがなく、入力に応答しない理由がわかりません。アプリはクラッシュすることなく引き続き実行され、navigationItem.rightbarButtonItem をタップして tableViewController を閉じることもできます。

新しい行を作成し続けることができます。それらは配列に追加され、tableView データ ソースの行数が正しく計算されます。しかし、テーブルは死んだようです。

tableViewController を閉じてから戻ってくると、以前に作成されたすべての行と、作成された直後に表示されなかった行がそこにあることがわかります。

どうすればこれを修正できるか本当にわかりません。

最初に試したのは、テーブルのリロード後にスクロールを強制することでしたが、修正されませんでした。

-(void) aNewRowHasBeenCreated
{
    [self.tableView reloadData];
    [self.tableView setScrollEnabled:YES]; 
}

また、tableView を強制的に最後の行までスクロールしようとしましたが、修正されませんでした。

-(void) aNewRowHasBeenCreated
{
   [self.tableView reloadData];
   [self.tableView setScrollEnabled: YES];
   [self.tableView scrollToRowAtIndexPosition: [self.tableView indexPathsForVisibleRows]last object] atScrollPosition: UITableViewScrollPositionBottom animated:YES];
}

テーブルをリロードするたびに行数を確認します。エラーはありません。数値は完全であり、新しい行データは配列内に正しくあり、セルのデータも表示されていません。

tableView が常に編集モードになっている可能性があると考えたので、NO に設定しようとしましたが、何も変わりません。ID は問題を解決しません。

2 つの注意事項:

1) tableView は、そのカスタム セルのそれぞれのデリゲートである必要があります。これらには、tableViewController によって処理される UITextField と UIStepper があります。カスタムセルのデリゲートとしてtableViewControllerを設定しないようにしましたが、何も変わらないので、問題はこれではありません。

2) self.tableView.bounces = NO ですが、これはスクロールの問題とは関係ありません。スクロールは有効になっています。

更新: さらにテストを行った結果、再利用可能なカスタム セルのデキューを削除するとすべてが正常に機能することがわかったので、問題は再利用に関するものである必要があります。

static NSString *CellIdentifier=@"MyCell"
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier];

ニコラ

4

1 に答える 1

0

何時間も経った後、私はそれを手に入れました。アミットが指摘したように、問題は cellForRowAtIndexPath に隠されていました...それは常に発生したわけではなく、すべてを再利用するセルを最初に有効/無効にしたときに同じように見えたので、問題をリンクしませんでした。それに。考えつくことができた他のすべてのオプションについて試した後、私はそれに戻りました。

問題は、セルの再利用と、カスタム セルのデリゲートとして tableView があり、textView とステッパーを公開せずに処理することにありました。

私はすべてのデラジョンのものを取り除き、textView とステッパーをビューのパブリック プロパティとして公開しました。これを行うことで、tableViewController を直接 cell.textView のデリゲートに設定し、ステッパーのターゲット/アクションを直接追加することができました。

現在、すべてが問題なく動作しています。

私を助けてくれたみんなに感謝します!

ニコラ

于 2013-04-08T13:49:29.313 に答える