2017-12-11 7 views
1

したがって、私はExpyTableViewタイプのメインテーブルビュー(https://github.com/okhanokbay/ExpyTableView)を持っています。すべてうまく、私はそれを実装し、それを動作させることができたが、下のgifで見ることができるように、私はDidSelectとDidDeselectに対して+1の追加アクションを行う必要がある。選択した場合はtableviewcellを展開し、選択解除するとコンパクトにします。Swift 3

demo gif

事が緑色で強調表示し、すぐに他の行を拡大するために選択したとき、および正常に戻る行の選択を解除して作るために、右後にそれをクリックしたときに私はしたいです。だから通常これは画面上で2回タップした後に起こる必要があります...代わりに私はgifに見られるように4を作ります。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    //MARK : Print 
    print("Selected Section \(indexPath.section), Row : \(indexPath.row)") 
    /////////////// 

    if let cell = tableView.cellForRow(at: indexPath) { 
     if (indexPath.section == 1) || (indexPath.section == 2) || (indexPath.section == 3) { 
     cell.layer.borderWidth = 2.0 
     cell.layer.borderColor = Theme.defaultColor().cgColor 
     cell.layer.shadowOffset = CGSize.init(width: 0.5, height: 0.5) 
     } 
    } 
} 

    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { 
    if let cell = tableView.cellForRow(at: indexPath) { 
     tableView.deselectRow(at: indexPath, animated: false) 
     cell.layer.borderWidth = 0.1 
     cell.layer.borderColor = UIColor.lightGray.cgColor 

    } 
} 

どこが間違っていましたか? THanks

+0

こんにちは、何が問題なのですか?正確な問題と予想される結果で説明を更新してください。 セルがハイライト表示されていて(コンテンツ全体がハイライトされていない)、選択解除後にハイライトが解除されているようですね。 結果は次のようになります。 1.ハイライト 2.展開を含むセル全体がハイライト表示されますか? 3.選択解除の解除(崩壊) そうですか?そうでない場合は、説明を更新してください。 –

+0

私は行をタップして強調表示して展開すると言ったように、行選択をもう一度クリックしてデフォルトのlayer.borderを選択解除します。これは2タップだけで行う必要があります。私の現在のプロジェクトではなく、これはgifに見られるように4つのステップで行われます –

答えて

0

didDeselectRowのテーブル変更を聞くのは、基本的に次のことを意味します。 テーブルビューのセルが選択解除されるとコードが実行されます。だからあなたが本当にそれを必要としない限り、あなたはそのコードを忘れることができます。しかし、あなたがしたのは、あなたがselectsの行です。一度拡張すると、次に崩壊する。あなたがする必要がどのような

は、ID didSelectRowAt だから次didSelectRowAt使用して、プロパティfileprivate var currentlySelectedCellIndexPath: IndexPath?を宣言しながら、選択したセルのインデックスを覚えているし、それを選択解除することです。

var currentlySelectedCellIndexPath: IndexPath? 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    if let currentlySelectedCellIndexPath = currentlySelectedCellIndexPath { 
     // unselect the selected one 
     makeCellUnSelected(in: tableView, on: currentlySelectedCellIndexPath) 
     guard currentlySelectedCellIndexPath != indexPath else { 
      tableView.deselectRow(at: currentlySelectedCellIndexPath , animated: true) 
      self.currentlySelectedCellIndexPath = nil 
      return 
     } 
    } 

    // Highlight the proper cell 
    makeCellSelected(in: tableView, on: indexPath) 
    currentlySelectedCellIndexPath = indexPath 
} 

func makeCellSelected(in tableView: UITableView, on indexPath: IndexPath) { 
    if let cell = tableView.cellForRow(at: indexPath) { 
     if (indexPath.section == 1) || (indexPath.section == 2) || (indexPath.section == 3) { 
      cell.layer.borderWidth = 2.0 
      cell.layer.borderColor = Theme.defaultColor().cgColor 
      cell.layer.shadowOffset = CGSize.init(width: 0.5, height: 0.5) 
     } 
    } 
} 

func makeCellUnSelected(in tableView: UITableView, on indexPath: IndexPath) { 
    if let cell = tableView.cellForRow(at: indexPath) { 
     cell.layer.borderWidth = 0.1 
     cell.layer.borderColor = UIColor.lightGray.cgColor 
    } 
} 

それがないかを説明するには、次の 関数はちょうどあなたが以前に行ったように/ハイライトを消しセルを強調表示するスタイルの変更を適用する& makeCellUnselectedをmakeCellselected。

ファンクションfunc tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)現在表示されているセルと選択されているセルのみをチェックします。同じセルの場合は、展開/折りたたむだけでよいので、ガードして折り返して折り返します。同じセルでない場合は、makeCellUnselectedを呼び出して選択を破棄し、新しいセルを選択します。これはこれまでのところあなたの問題を解決するはずです。他にご質問がありましたら、お知らせください。

+0

応答のおかげで。 2つのエラーがあります:@ 1 - currentlySelectedCellIndexPathをvarに変更しました。 @ 2 - それは現在の選択されたセルのインデックス= nil => 'IndexPath'にNilを割り当てることができないと言っています –

+0

@FagadariuMarcelオハイオ州、ええ、私はあなたを持っています。修正されました。 –

+0

本当にうまく動作しますが、TouchUpInside 1でのみ動作するためにはself.mainTableView.allowsMultipleSelection = trueとコメントする必要がありました。私が3行すべてを選択することができれば、今は1に制限されています。理想?それでも、ありがとう。 –

0

私が行うことは、セルを展開する必要がある場合に格納するモデルisExpandedのプロパティを持つことです。そうすればheightForRowAtIndexPathで商品を手に入れてisExpandedの情報を読むことができます。

関連する問題