私は現在、ワークアウトを追跡し、各トレーニングの練習問題を追跡する基本的なリストワークアウトアプリケーションに取り組んでいます。私はより高度な編集オプションを可能にするために、TableViewControllerの現在の '編集'モードを拡張したいと思います。ここで私はこれまで持っているものです。「編集」モードでUITableViewにセクションを追加する
あなたが見ることができるようにワークアウトのタイトルを編集することができるように、私は、テーブルビューの上部にあるセクションを挿入しています。私が直面している問題は二重です:
- 編集ボタンがもうタップされてもアニメーションがありません。
- エクササイズの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
}
のインデックスに関連し、この私のコードのすべてではありませんが、私はそれがこの問題に関連する可能性があり、コードのすべてであると信じています。それが不足している場合は私に教えてください私はそれを更新します。
私にお答えする時間がかかる人には、先進的に感謝しています。
あなたは、2つの完全に無関係な質問をしていて、第二の問題に関連する情報を提供していません。ですから、この質問を、編集モードに出入りするときのアニメーションの消失に関する第1号に限定することをお勧めします。次に、必要に応じて、問題に特有の別の質問を投稿して、演習の1つをスワイプします。いつ見ているのかを明確に説明し、その問題にいつも関連するものを含めるようにしてください。 – rmaddy