2017-01-07 4 views
1

セクション内に所定の数のセルがあります。私の目標は、最後に選択したセルだけにチェックマークを表示させることです。他の細胞は感染してはならない。スウィフト:最後に選択したセルのみのチェックマークをオンにする - 動作していない

私はthisに似ていますが古いスレッドの機能を発見しました。私はそれを修正しました(そして、私はここに問題があります)。Swift 3.0の変更のために少しです。

以下に記載されているように、私にとっては機能が正しく動作しません。セクション内の最後のセル(最後に選択されたものではなく、最後に選択されたもの)のみがチェックマークを取得します。しかし、なぜ私は理解できません。以下、この文が真と評価され、それが理にかなっているときに私が見ることができる値をプリントアウトすることにより

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    let section = indexPath.section 
    let numberOfRows = tableView.numberOfRows(inSection: section) 
    for row in 0..<numberOfRows { 
     if let cell = tableView.cellForRow(at: indexPath) { 
      cell.accessoryType = row == indexPath.row ? .checkmark : .none 
     } 
    } 
} 

:ここ

は、フル機能です。しかし、チェックマークはトグルされません。

cell.accessoryType = row == indexPath.row ? .checkmark : .none 

ありがとうございます!

答えて

1

まずそれが一度に一つのセルを選択することができ、あなたのテーブルビューを伝える:

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.tableView.allowsMultipleSelection = false 
} 

を次に、あなたは現在のセルが選択されているのセクションを取得し、数を計算している、のはあなたのコードを分析してみましょうその特定のセクションの行の数。そのセクションの行を繰り返し、指定されたindexPathにセルがあるかどうかをチェックします(常にindexPathにセルがあるため、常にtrueに評価されると思います。 forループ)。次に、forループの行が、現在ユーザーによって選択されているセルの行と等しい場合に、セルにチェックマークを付けるように指示します。 あなたの関数が書かれているので、セクション内の最後のものだけがチェックマークを取得する理由はありませんが、あなたはその問題を複雑にしました。

あなたのセルは次の方法で描かれています。

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "YourCell", for: indexPath) 

    cell.textLabel?.text = "your text" 

    cell.accessoryType = cell.isSelected ? .checkmark : .none 
    // cell.selectionStyle = .none if you want to avoid the cell being highlighted on selection then uncomment 

    return cell 
    } 

次に、あなただけのアクセサリーの種類がtableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) .HereにtableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)と.noneに.checkmarkそれを行うには、私は知っていると私は再び編集することができない場合は、良いことがありますどのようにあるべきであると言うことができます。

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    tableView.cellForRowAtIndexPath(indexPath)?.accessoryType = .checkmark 
} 

override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
    tableView.cellForRowAtIndexPath(indexPath)?.accessoryType = .none 
} 
+0

Ocunidee、この試みに感謝します。私はあなたがどこにいるかにさえ近くない。私はまだこの時点でテーブルビューの基本についてはっきりしていません。今私は、私が投稿したコードが私がそれがすべきと思っていることをしていない理由が本当に不思議です。 – user1269290

+0

ああ、私はあなたが求めていたものを誤解していました。何回、あなたは1つのセルだけを選択したいですか(チェックマークが表示されます)? 複数の選択を許可していないことをテーブルビューに伝える必要があります。 – Ocunidee

+0

上記の編集を参照 – Ocunidee

関連する問題