在我的應用程序中,用戶根據他/她選擇的單元格更改顯示在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佔位符。從我的分析中我認爲,一旦我向下滾動,單元就從內存中刪除。因此,儘管選擇了這些單元格,但它們未能顯示在父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;
}
當用戶輸入文字時,您需要這樣做'chosenFieldsViewController.field0.placeholder = selectedCell.textLabel.text;'。否則,您必須以某種形式將其存儲在您的課堂中,以便在滾動時您不會丟失此信息。 – iDev
@ACB:我曾想過你提到的完全相同的解決方案。但它有點棘手。有三個部分,我希望這些字段的顯示順序與他們已選擇的順序相同。如果用戶取消選擇一個字段並從另一個部分選擇一個字段,代碼會變得稍微複雜。爲了幫助你形象化,請參考:http://stackoverflow.com/questions/13460535/label-text-getting-mixed-up。事實上,我仍然感謝你幫助我解決了應用程序的一個主要問題。 :-) –
很高興知道它有幫助。 :)你能分享一些更多的代碼嗎?實現上述目的的唯一方法是將其存儲爲當用戶輸入文本時。如果您可以分享更多的代碼,那麼我們可能會檢查如何克服您面臨的複雜情況。根據我的理解,當用戶輸入某些東西時,您需要將其存儲在數組中,並在用戶取消選擇該單元格時將其刪除。然後在用戶選擇下一個時添加。此數組將始終按用戶選擇的順序排列。 – iDev