0

このことは、5日間私を怒らせています。インターネットから取得したデータが含まれているUITableViewものがあります。NSMutableDictionaryすべてが完璧に機能します。

[NSURLRequest sendAsynchronousRequest...]何か新しいものがある場合に実際にデータを返す新しいデータをチェックする関数があります。有用なデータがある場合は、そのデータを辞書に追加し[self.tableView reloadData];て表示するように慎重に作成しました。表示されていますが、ここに問題があります。私のtableViewの下には、textFieldと、ユーザーがメッセージを送信できるボタンがあります。ユーザーがテキスト フィールドをタップすると、(通常は) キーボードが表示され、textField が「上」に移動し、ボタンが「上」に移動し、tableView の高さがキーボードをオンにした状態で表示されるようにアニメーション化します。キーボードのリターンを押すと、キーボードが辞任し、すべてが元に戻ります。それだけです。

問題は、キーボードがオンになっていて、すべてが上に移動し、 iに移動するとreloadData、すべてのビューがリセットされ、つまり、tableView が完全な高さに戻り、ボタンが下に戻り、textField が下に戻りますが、キーボードはそのままです...なぜ? ビューが自動的にリセットされるのはなぜですか?

私も[self.tableView insertRowsAtIndexPaths...]その効果を生まない思考を使ってみましたが、同じことをします. reloadDatainsertRowsAtIndexPaths(新しいデータを挿入する仕事をうまく行っている) が私のビューをめちゃくちゃにするのはなぜですか?

また、印刷する場合:

NSLog(@"Size Before: %f", self.tableView.frame.size.height);
[messages setObject:[newMessages objectForKey:key] forKey:date];
messagesKeys = [messages allKeys];
NSIndexPath *oNewIndexPath = [NSIndexPath indexPathForItem:[messagesKeys count] - 1 inSection:0];
[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:oNewIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView endUpdates];
NSLog(@"Size After: %f", self.tableView.frame.size.height);

更新前後のテーブルビューのサイズは、同じ縮小されたサイズを示していますが、そうではありません。TableView、ボタン、および textField がリセットされ、ストーリーボードのように見えます...

4

2 に答える 2

0

tableView を縮小するのではなく、frame.y を負の値に設定して、tableView を画面外に移動してみてください。この方法で高さに対処する必要はありません

于 2013-11-12T21:24:35.670 に答える