2017-09-17 21 views
0

私は現在、ワークアウトを追跡し、各トレーニングの練習問題を追跡する基本的なリストワークアウトアプリケーションに取り組んでいます。私はより高度な編集オプションを可能にするために、TableViewControllerの現在の '編集'モードを拡張したいと思います。ここで私はこれまで持っているものです。「編集」モードでUITableViewにセクションを追加する

enter image description hereenter image description here

あなたが見ることができるようにワークアウトのタイトルを編集することができるように、私は、テーブルビューの上部にあるセクションを挿入しています。私が直面している問題は二重です:

  1. 編集ボタンがもうタップされてもアニメーションがありません。
  2. エクササイズの1つ(SquatまたはBench press)で右にスワイプすると、エクササイズを含むセクション全体が消えます。

まず、setEditing関数で2つの異なる関数の1つをトリガして、ブール値の編集がtrueまたはfalseを返すかどうかに基づいて読み取りモードまたは編集モードに切り替えます。

override func setEditing(_ editing: Bool, animated: Bool) { 
    super.setEditing(editing, animated: true) 
    tableView.setEditing(editing, animated: true) 
    if editing { 
     switchToEditMode() 
    } else { 
     switchToReadMode() 
    } 
} 

そして私はどちらか私は(以下にさらに見られる)の表を表示する方法を決定するために使用tableSectionsKeyと呼ばれる配列に「addTitle」セクション(第2の画像に見られるテキストフィールド)を挿入し、リロードテーブルデータ

func switchToEditMode(){ 
    tableSectionsKey.insert("addTitle", at:0) 
    self.tableView.reloadData() 
} 

func switchToReadMode(){ 
    tableSectionsKey.remove(at: 0) 
    self.tableView.reloadData() 
} 

ここは私のtableViewデータメソッドです。基本的には、私が上記のtableSectionsKeyという配列を持っていて、私がどのモードに入っていてどの情報を表示するかに基づいてセクションに関連する文字列を追加します。現在のトレーニングルーチンは、いずれかを持っている場合、最初はそれだけでその後のviewDidLoadで、私は(演習のリストについては)「運動」のセクションを追加

class WorkoutRoutineTableViewController: UITableViewController, UITextFieldDelegate, UINavigationControllerDelegate { 
    var tableSectionsKey = ["addExercise"] 
} 

「運動を追加ルーチンに」セルに関連した「addExercise」を、持っています、新しいモードの場合はaddTitleセクションを追加します。これは、新しいコントローラを追加するボタンまたは既存のワークアウトのリストからビューコントローラにアクセスしているかどうかを判断するために使用されます(ページが作成に使用されているかどうかを判断するため)。または既存のものを更新する)

次に、cellForRowAt関数では、どのようにしてセルをどのようにスタイルするかを決定しますテーブルのEセクションがtableSectionsKey配列

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let section = indexPath.section 
    let sectionKey = tableSectionsKey[section] 
    let cellIdentifier = sectionKey + "TableViewCell" 

    switch sectionKey { 
    case "addTitle": 

     guard let addTitleCell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? AddTitleTableViewCell else { 
      fatalError("Was expecting cell of type AddTitleTableViewCell.") 
     } 
     setUpAddTitleTableViewCell(for: addTitleCell) 

     return addTitleCell 

    case "exercise": 

     guard let exerciseCell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? ExerciseTableViewCell else { 
      fatalError("Was expecting cell of type ExerciseTableViewCell.") 
     } 
     let exercise = workoutRoutine.exercises[indexPath.row] 
     setUpExerciseTableViewCell(for: exerciseCell, with: exercise) 

     return exerciseCell 

    case "addExercise": 

     let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) 

     return cell 

    default: 
     fatalError("Couldn't find section: \(section), in WorkoutRoutineTableView") 
    } 
} 

private func setUpExerciseTableViewCell(for cell: ExerciseTableViewCell, with exercise: Exercise) { 
    let titleText = exercise.name 
    let detailsText = "\(exercise.sets)x\(exercise.reps) - \(exercise.weight)lbs" 
    cell.titleLabel.text = titleText 
    cell.detailsLabel.text = detailsText 
} 

private func setUpAddTitleTableViewCell(for cell: AddTitleTableViewCell) { 
    cell.titleTextField.delegate = self 
    if (workoutRoutine.title != nil) { 
     cell.titleTextField.text = workoutRoutine.title 
    } 
    // Set the WorkoutRoutineTableViewController property 'titleTextField' to the 'titleTextField' found in the addTitleTableViewCell 
    self.titleTextField = cell.titleTextField 
} 

のインデックスに関連し、この私のコードのすべてではありませんが、私はそれがこの問題に関連する可能性があり、コードのすべてであると信じています。それが不足している場合は私に教えてください私はそれを更新します。

私にお答えする時間がかかる人には、先進的に感謝しています。

+0

あなたは、2つの完全に無関係な質問をしていて、第二の問題に関連する情報を提供していません。ですから、この質問を、編集モードに出入りするときのアニメーションの消失に関する第1号に限定することをお勧めします。次に、必要に応じて、問題に特有の別の質問を投稿して、演習の1つをスワイプします。いつ見ているのかを明確に説明し、その問題にいつも関連するものを含めるようにしてください。 – rmaddy

答えて

0

あなたのアニメーションの問題は、reloadDataの使用によるものです。 reloadDataの使用を、1つのセクションだけを挿入または削除する呼び出しに置き換える必要があります。

func switchToEditMode(){ 
    tableSectionsKey.insert("addTitle", at:0) 
    let section = IndexSet(integer: 0) 
    self.tableView.insertSections(section, with: .left) // use whatever animation you want 
} 

func switchToReadMode(){ 
    tableSectionsKey.remove(at: 0) 
    let section = IndexSet(integer: 0) 
    self.tableView.deleteSections(section, with: .left) // use whatever animation you want 
} 
関連する問題