2

優しくして、私は学んでいます。

以下のコードは、最初に行をタップした後(適切にチェックマークを付ける)、同じチェックマークを削除するためにセルを2回タップする必要があるという事実を除いて、実際には正常に機能します。

同様に、それを削除した後、チェックマークを元に戻すには2回タップする必要があります。

これを修正するにはどうすればよいですか?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *thisCell = [tableView cellForRowAtIndexPath:indexPath];
    NSInteger selectedRow = indexPath.row;

    if (thisCell.accessoryType == UITableViewCellAccessoryNone) {
        thisCell.accessoryType = UITableViewCellAccessoryCheckmark;
        if (selectedRow == 0) dm = 1;
        else if (selectedRow == 1) athero1 = 1;
        else if (selectedRow == 2) athero2 = 1;
        else if (selectedRow == 3) athero3 = 1;
        else if (selectedRow == 4) familyHistory1 = 1;
        else if (selectedRow == 5) familyHistory2 = 1;
    }
    else  {
        thisCell.accessoryType = UITableViewCellAccessoryNone;
        if (selectedRow == 0) dm = 0;
        else if (selectedRow == 1) athero1 = 0;
        else if (selectedRow == 2) athero2 = 0;
        else if (selectedRow == 3) athero3 = 0;
        else if (selectedRow == 4) familyHistory1 = 0;
        else if (selectedRow == 5) familyHistory2 = 0;
    }
}
4

3 に答える 3

2

allowsMultipleSelectionが に設定されていないことを確認してYESください。このプロパティを使用しない場合のデフォルト値は ですNO。クラスのどこかでこのプロパティを使用している場合は、設定してみてNO、機能するかどうかを確認してください。これにより、行を選択するために 2 回のタップが必要になります。

self.tableView.allowsMultipleSelection = NO;
于 2012-09-11T19:55:05.327 に答える
1

選択した行インデックスを格納する配列を用意します。-didSelectで、行インデックスが配列に既に存在するかどうかを確認し、存在しない場合は追加し、そうでない場合は配列から削除します。そして、テーブルをリロードします。それで全部です。これでうまくいくと思います。:]

于 2012-09-12T13:49:53.623 に答える
0

2 つの UITableViewControllers をナビゲーション コントローラー スタックにプッシュしている可能性はありますか?

私はこれに遭遇しました.2番目のTableViewControllerがプッシュされる原因となったswitchステートメントに「ブレーク」がないことが問題でした。ビューのすべてに 2 回のタップが必要でした。「戻る」ボタンもそうです。

于 2012-09-09T16:55:01.950 に答える