ios - 将复选标记保存到 tableView Swift 时出现问题
问题描述
我在将复选标记保存到我的表格视图时遇到问题,本质上它是一个健身应用程序,当用户选择锻炼时,表格视图会显示它,按下锻炼时会出现复选标记,但我无法保存该检查标记到所需的练习。下面我以其中一个锻炼为例和 tableView 控制器。
我之前已经发布过这个,但还没有任何有效的回复,所以任何帮助都将不胜感激。
锻炼之一的例子:
import Foundation
class The600Workout {
let workoutArray = [
"Don't forget to warm up before every workout!",
"Start with little/ no weight and work your way up",
"--------------------------------------------------------------------------------",
"Pull ups | 25 Reps",
"Lunges | 50 Reps (Low weight)",
"Calf Raises | 50 Reps (Low weight)",
"Shoulder press | 50 Reps (Low weight)",
"Push ups | 50 Reps",
"Shrugs | 50 Reps (Low weight)",
"Leg raises | 50 Reps",
"Bench press | 50 Reps (Low weight)",
"More Pull ups | 25 Reps",
"Squats | 50 Reps (Low weight)",
"Incline Bench press | 50 Reps (Low weight)",
"Bicep curls | 50 Reps (Low weight)",
"Tricep pull downs | 50 Reps (Low weight)"]
}
表视图控制器:
import UIKit
class workoutTableView: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var workoutTableView: UITableView!
var navTitle: String = ""
var workout = [String]()
let tlabel = UILabel()
var completed: [Bool] = []
override func viewDidLoad() {
super.viewDidLoad()
setWorkout()
workoutTableView.delegate = self
workoutTableView.dataSource = self
tlabel.text = navTitle
tlabel.textAlignment = .center
tlabel.font = UIFont(name: "Arial Rounded MT Bold", size: 30)
tlabel.adjustsFontSizeToFitWidth = true
navigationItem.titleView = tlabel
completed = [Bool](repeating: false, count: workout.count)
}
func setWorkout() {
if navTitle == "The 600 Workout" {
workout = The600Workout().workoutArray
}
else if navTitle == "5 Days for Muscle" {
workout = FiveDaysForMuscle().workoutArray
}
else if navTitle == "Marathon Ready" {
workout = MarathonReady().workoutArray
}
else if navTitle == "HIIT @ Home" {
workout = HIITAtHome().workoutArray
}
else if navTitle == "Get Strong" {
workout = GetStrong().workoutArray
}
else if navTitle == "Body Weight Blast" {
workout = BodyWeightBlast().workoutArray
}
else if navTitle == "Bands Pump" {
workout = BandsPump().workoutArray
}
else if navTitle == "Quickie Warm up" {
workout = QuickieWarmUp().workoutArray
}
else if navTitle == "The Best Circuit Workout" {
workout = TheBestCircuit().workoutArray
}
else if navTitle == "The Gym HIIT Workout" {
workout = GymHIIT().workoutArray
}
else if navTitle == "The Ultimate Workout" {
workout = UltimateWorkout().workoutArray
}
else if navTitle == "Warm up For Weights" {
workout = WarmUpForWeights().workoutArray
}
else if navTitle == "6 Day Bro Split" {
workout = SixDayBroSplit().workoutArray
}
else if navTitle == "Explosive Workout" {
workout = ExplosiveWorkout().workoutArray
}
else if navTitle == "Strength Circuit" {
workout = StrengthCircuit().workoutArray
}
else if navTitle == "Killer Circuit" {
workout = KillerCircuit().workoutArray
}
else if navTitle == "Fitness Test" {
workout = FitnessTest().workoutArray
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return workout.count
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
completed[indexPath.row] = !completed[indexPath.row]
tableView.cellForRow(at: indexPath)?.accessoryType = completed[indexPath.row] ? .checkmark : .none
tableView.deselectRow(at: indexPath, animated: false)
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "prototypeCell", for: indexPath)
cell.textLabel?.text = workout[indexPath.row]
cell.accessoryType = completed[indexPath.row] ? .checkmark : .none
cell.layer.borderWidth = 5
cell.layer.cornerRadius = 20
cell.layer.borderColor = #colorLiteral(red: 0, green: 0.3285208941, blue: 0.5748849511, alpha: 1)
cell.textLabel?.textColor = UIColor.black
cell.textLabel?.adjustsFontSizeToFitWidth = true
cell.textLabel?.font = .boldSystemFont(ofSize: 15)
return cell
}
}
谢谢!
解决方案
更正:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
completed[indexPath.row] = !completed[indexPath.row]
tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCell.AccessoryType.checkmark
}
并添加:
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
completed[indexPath.row] = !completed[indexPath.row]
tableView.cellForRow(at: indexPath)?.accessoryType = UITableViewCell.AccessoryType.none
}
推荐阅读
- python - 将列表和字符串列表加入列表
- java - 带有 React 的带有 Rest API 的 Spring Security
- r - R:contour3d 添加网格到 3D 显示
- entity-framework - 在 Entity Framework Core 中使用 hierarchyid
- flutter - 颤振 - 如何查看保存在本地存储中的文件?
- unit-testing - 从对象列表中匹配项目的 Kluent 模式
- html - angular *ngIf- 检查特定索引中的数组是否为空
- reactjs - React Hooks 第二个组件
- scala - 创建管道时 SparkContext 已关闭
- reactjs - 带有(本地数据库)的 reactjs Web 应用程序,例如带有 sqllite 的