0

1つのタブにUINavigationControllerがあり、ルートビューコントローラーが割り当てられています。ルートビューコントローラーは、より多くの選択肢にドリルダウンするUITableViewで構成されています。ルートビューコントローラーでアイテムを選択すると、別のuitableviewが表示され、以下を使用して、 cellForRowAtIndexPathの次のコードを使用して、そのセクションまたはグループに 1つのチェックマークのみを割り当てます。

if([self.checkedIndexPath isEqual:indexPath])
{
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
    cell.accessoryType = UITableViewCellAccessoryNone;
}

およびdidSelectRowAtIndexPathの次のとおりです。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// Uncheck the previous checked row
if(self.checkedIndexPath)
{
    UITableViewCell* uncheckCell = [tableView
                                    cellForRowAtIndexPath:self.checkedIndexPath];
    uncheckCell.accessoryType = UITableViewCellAccessoryNone;
}
UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
cell.accessoryType = UITableViewCellAccessoryCheckmark;
self.checkedIndexPath = indexPath;

[tableView deselectRowAtIndexPath:indexPath animated:YES];
}

私の問題は、ナビゲーションメニューの[戻る]ボタンを使用して同じUItableviewに戻ると、チェックマークが消えることです。ただし、そのビューで上下にスクロールすると、これは当てはまりません。ナビゲーションコントローラーを使用して前後に移動するときに、これらのチェックマークをそこに保持するにはどうすればよいですか。

4

1 に答える 1

1

前後に移動するたびに新しい UIViewController インスタンスをプッシュしているため、この問題が発生していると思います。新しいインスタンスは、以前のcheckedPathプロパティが何であったかを認識していません。

これを解決するには、次のいずれかを行う必要があります。

  1. チェックされた行の値を何らかの方法で永続化します (NSUserDefaults、CoreData など)。このようにして、どのインスタンスも同じチェックされた行の値を取得します
  2. プッシュ時に同じView Controllerを再利用します。
于 2012-11-24T02:45:52.643 に答える