UITableView に 5 つのセルがあります。それぞれに、ユーザーがデータを入力するサブビューとして UITextField があります。セルの再利用を使用すると、セルがスクロールされて表示されなくなると、テキストフィールドがクリアされます。私はこれに対処する必要はありません。この問題が発生しないようにセルを再利用しない方法はありますか?
これは悪い考えですか?
UITableView に 5 つのセルがあります。それぞれに、ユーザーがデータを入力するサブビューとして UITextField があります。セルの再利用を使用すると、セルがスクロールされて表示されなくなると、テキストフィールドがクリアされます。私はこれに対処する必要はありません。この問題が発生しないようにセルを再利用しない方法はありますか?
これは悪い考えですか?
私のアプリの1つに同じ機能があり、以下のコードを使用してそれを達成しましたが、この種の問題は一度もありませんでした。
まず、すべての textField 値を一時的に配列に格納する必要があります。このように配列を作ります。
arrTemp=[[NSMutableArray alloc]initWithObjects:[NSString stringWithFormat:@""],
[NSString stringWithFormat:@""],
[NSString stringWithFormat:@""],
[NSString stringWithFormat:@""],
[NSString stringWithFormat:@""],
[NSString stringWithFormat:@""],
[NSString stringWithFormat:@""],
[NSString stringWithFormat:@""],
[NSString stringWithFormat:@""],nil];
次に、すべての textField tag = indexPath.row; を指定します。
その後、以下の 2 つのメソッドで textField の値を置き換える必要があります。
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
[arrTemp replaceObjectAtIndex:textField.tag withObject:textField.text];
}
-(void)textFieldDidEndEditing:(UITextField *)textField{
[arrTemp replaceObjectAtIndex:textField.tag withObject:textField.text];
}
最後に、cellForRowAtIndexPath データソース メソッドでその値を設定する必要があります。そのため、ユーザーがテーブルビューをスクロールするたびに、一時配列から以前の値が設定されます。このような。
cell.txtEntry.text = [arrTemp objectAtIndex:indexPath.row];
ここに貼り付けるコードの一部を忘れた可能性があります。それで何か問題があれば教えてください。
5つのtextviewは、セルをキューに入れたりキューから外したりせずに、すべてのセルを作成してロードし、配列に格納して、要求に応じて返すのに最適なケースだと思います。
Apple の Recipes サンプル アプリケーションを開くと、Apple が xib ファイルを使用して UITableViewCells をロードする方法がわかります。
IngredientDetailViewController ファイル内:
@property (nonatomic, assign) IBOutlet EditingTableViewCell *editingTableViewCell;
// ...
[[NSBundle mainBundle] loadNibNamed:@"EditingTableViewCell" owner:self options:nil];
// this will cause the IBOutlet to be connected, and you can now use self.editingTableViewCell
セルを再利用しているように見えますが、同じメソッドを使用して 5 つのセルを 5 つの個別の IBOutlets にロードし、cellForRowAtIndexPath で dequeue メソッドを呼び出すのではなく、それらの 5 つを返すだけです。
注: おそらく、セルを ( ingstrong
ではなく) プロパティとして保存する必要があります。assign