私のアプリでは、ユーザーは自分が選択したセルに応じて、tableViewに表示されるフィールドを変更します。(参考までに...複数のセルの選択を許可しました。)ユーザーが戻るボタンを押すと、プログラムは選択されたセルのtextLabelを親のviewControllerのプレースホルダーにコピーします。
これが私のコードの関連セクションです:
- (void)willMoveToParentViewController:(UIViewController *)parent
{
int tempCount = 0;
for (int section = 0; section < 3; section++)
{
int rowMax;
if (section == 0)
rowMax = 3;
else if (section == 1)
rowMax = 5;
else if(section == 2)
rowMax = 3;
for(int row = 0; row < rowMax; row++)
{
NSIndexPath *tempIndexPath = [NSIndexPath indexPathForRow:row inSection:section];
UITableViewCell *selectedCell = [self.tableView cellForRowAtIndexPath:tempIndexPath];
if(selectedCell.accessoryType == UITableViewCellAccessoryCheckmark)
{
NSLog(@"tempCount = %d", tempCount);
tempCount++;
if (tempCount == 1)
chosenFieldsViewController.field0.placeholder = selectedCell.textLabel.text;
else if(tempCount == 2)
chosenFieldsViewController.field1.placeholder = selectedCell.textLabel.text;
else if(tempCount == 3)
chosenFieldsViewController.field2.placeholder = selectedCell.textLabel.text;
}
}
}
}
tableViewを下にスクロールするとセルを選択した後、選択したセルがparentVCにplaceHolderとして表示されないことに気付きました。私の分析から、下にスクロールすると、セルがメモリから削除されると思います。したがって、セルが選択されているにもかかわらず、それらは親VCに表示されません。
もしそうなら、上にスクロールしたときにセルが選択されているように見えるのはなぜですか?
ユーザーがスクロールしても、選択したセルを追跡する方法を誰かに提案していただければ幸いです。
ありがとう。
編集1
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
if(selectedCell.accessoryType != UITableViewCellAccessoryCheckmark && count<3)
{
selectedCell.accessoryType = UITableViewCellAccessoryCheckmark;
count ++;
}
else if(selectedCell.accessoryType == UITableViewCellAccessoryCheckmark)
{
selectedCell.accessoryType = UITableViewCellAccessoryNone;
count--;
}
}
編集2
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifier = [NSString stringWithFormat:@"CellForRow%dSection%d",indexPath.row, indexPath.section];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone; // VERY IMPORTANT
if (indexPath.section == 0)
{
switch(indexPath.row)
{
case 0:
cell.textLabel.text = @"Class A";
break;
case 1:
cell.textLabel.text = @"Class B";
break;
case 2:
cell.textLabel.text = @"Class C";
break;
default:
break;
}
}
if(indexPath.section == 1)
{
switch(indexPath.row)
{
case 0:
cell.textLabel.text = @"Class D";
break;
case 1:
cell.textLabel.text = @"Class E";
break;
case 2:
cell.textLabel.text = @"Class F";
break;
case 3:
cell.textLabel.text = @"Class G";
break;
case 4:
cell.textLabel.text = @"Class H";
break;
default:
break;
}
}
if(indexPath.section == 2)
{
switch (indexPath.row)
{
case 0:
cell.textLabel.text = @"Class I";
break;
case 1:
cell.textLabel.text = @"Class J";
break;
case 2:
cell.textLabel.text = @"Class K";
break;
default:
break;
}
}
return cell;
}