UITableView + UISlider。为数组中的特定索引保存值

UITableView + UISlider. Save Value for specific Index in Array

我有一个调查表视图,如图所示。我想在特定索引处保存每一行的最终值。例如,“ajkpXc”代表第一行,用户必须权衡“能力工作知识和生产力”与“创造力”相比有多重要。为了正确使用信息,显然我必须将其存储到特定索引。

我尝试实现的所有解决方案都没有奏效。 我希望我的目标很明确,并且在我提供代码时你们中的一些人可以找到可行的解决方案。 :)

顺便说一句:我做了一个数组和一个字典,所以你可以找出最适合我的目的。

感谢您的帮助!!!

class AHPRatingPriorityViewController: UIViewController {

// MARK: - Properties
    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var saveButton: UIButton!
    @IBOutlet weak var errorLabel: UILabel!
    
    
    var userID:String?
    var currentValue:Int?
    private var ratingStorage = [Int](repeating: 0, count: 28)
    private static var rowsCount = 28
    let step : Float = 1

    
    let leftItems = ["Ability,\n Job Knowledge,\n Productivity",
                     "Ability, Job Knowledge, Productivity",
                     "Ability, Job Knowledge, Productivity",
                     "Ability, Job Knowledge, Productivity",
                     "Ability, Job Knowledge, Productivity",
                     "Ability, Job Knowledge, Productivity",
                     "Ability, Job Knowledge, Productivity",
                     "Creativity",
                     "Creativity",
                     "Creativity",
                     "Creativity",
                     "Creativity",
                     "Creativity",
                     "initiative, judgment, responsibility",
                     "initiative, judgment, responsibility",
                     "initiative, judgment, responsibility",
                     "initiative, judgment, responsibility",
                     "initiative, judgment, responsibility",
                     "quality of work, planning, accuracy",
                     "quality of work, planning, accuracy",
                     "quality of work, planning, accuracy",
                     "quality of work, planning, accuracy",
                     "Organization and Job Commitment",
                     "Organization and Job Commitment",
                     "Organization and Job Commitment",
                     "Organization and Supervisor Loyalty",
                     "Organization and Supervisor Loyalty",
                     "interpersonal relationships,\n attitude,\n communication skills,\n cooperation"]

    let rightItems = ["Creativity",
                      "Initiative, Judgment, Responsibility",
                      "Quality of work, planning, accuracy",
                      "Organization and Job Commitment",
                      "Organization and Supervisor Loyalty",
                      "interpersonal relationships, attitude, communication skills, cooperation",
                      "dependability, punctuality, honesty",
                      "initiative, judgment, responsibility",
                      "quality of work, planning, accuracy",
                      "Organization and Job Commitment",
                      "Organization and Supervisor Loyalty",
                      "interpersonal relationships, attitude communication skills, cooperation",
                      "dependability, punctuality, honesty",
                      "Quality of work, planning, accuracy",
                      "Organization and Job Commitment",
                      "Organization and Supervisor Loyalty",
                      "interpersonal relationships, attitude, communication skills, cooperation",
                      "dependability, punctuality, honesty",
                      "Organization and Job Commitment",
                      "Organization and Supervisor Loyalty",
                      "interpersonal relationships, attitude, communication skills, cooperation",
                      "dependability, punctuality, honesty",
                      "Organization and Supervisor Loyalty",
                      "interpersonal relationships, attitude, communication skills, cooperation",
                      "dependability, punctuality, honesty",
                      "interpersonal relationships, attitude, communication skills, cooperation",
                      "dependability, punctuality, honesty",
                      "dependability, punctuality, honesty"]

    
    override func viewDidLoad() {
        super.viewDidLoad()

        setUpElements()
               
               
        self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
               
        for i in 0..<AHPRatingPriorityViewController.rowsCount {
          ratingStorage[i] = Int(i) / 27 * 18
        }
        


    }
    
    // MARK: - Element Style
       func setUpElements() {
           
           
            // Hide the error label
            errorLabel.alpha = 0

       }
       
       
       func configureTableView() {
           // remove separators for empty cells
          tableView.tableFooterView = UIView()
           // remove separators from cells
           tableView.separatorStyle = .none
       }
       
       // Error Handling for save
       func showError(_ message:String) {

           errorLabel.text = message
           errorLabel.alpha = 1
          }
    
       
       
       func validateFields() -> String? {
           
           return nil
       }
              

@IBAction func saveRating(_ sender: Any) {
        
        
        let user = Auth.auth().currentUser
                  if  let user = user {

                      let uid = user.uid
                      userID = uid

                      // Validate the fields
                      let error = validateFields()

                      if error != nil {

                          // There is something wrong with the fields, show error message
                          print("an error occured")
                      } else {
                        
                        
                        var AHPPriorities: [String: Int] = ["ajkpXc": 0,"ajkpXijr": 0,"ajkpXqpa": 0,"ajkpXcoj": 0,"ajkpXlos": 0,"ajkpXiracc": 0, "ajkpXdph": 0,"cXijr": 0,"cXqpa": 0, "cXcoj": 0, "cXlos": 0, "cXiracc": 0,"cXdph": 0, "ijrXqpa": 0, "ijrXcoj": 0,"ijrXlos": 0,"ijrXiracc": 0,"ijrXdph": 0, "qpaXcoj": 0, "qpaXlos": 0, "qpaXiracc": 0, "qpaXdph": 0,"cojXlos": 0, "cojXiracc": 0,"cojXdph": 0, "losXiracc": 0, "losXdph": 0, "iraccXdph": 0]
                        
                        let ajkpXc = ratingStorage[0]
                        let ajkpXijr = ratingStorage[1]
                        let ajkpXqpa = ratingStorage[2]
                        let ajkpXcoj = ratingStorage[3]
                        let ajkpXlos = ratingStorage[4]
                        let ajkpXiracc = ratingStorage[5]
                        let ajkpXdph = ratingStorage[6]
                        let cXijr = ratingStorage[7]
                        let cXqpa = ratingStorage[8]
                        let cXcoj = ratingStorage[9]
                        let cXlos = ratingStorage[10]
                        let cXiracc = ratingStorage[11]
                        let cXdph = ratingStorage[12]
                        let ijrXqpa = ratingStorage[13]
                        let ijrXcoj = ratingStorage[14]
                        let ijrXlos = ratingStorage[15]
                        let ijrXiracc = ratingStorage[16]
                        let ijrXdph = ratingStorage[17]
                        let qpaXcoj = ratingStorage[18]
                        let qpaXlos = ratingStorage[19]
                        let qpaXiracc = ratingStorage[20]
                        let qpaXdph = ratingStorage[21]
                        let cojXlos = ratingStorage[22]
                        let cojXiracc = ratingStorage[23]
                        let cojXdph = ratingStorage[24]
                        let losXiracc = ratingStorage[25]
                        let losXdph = ratingStorage[26]
                        let iraccXdph = ratingStorage[27]

                        GLajkpXc = ajkpXc
                        GLajkpXijr = ajkpXijr
                        GLajkpXqpa = ajkpXqpa
                        GLajkpXcoj = ajkpXcoj
                        GLajkpXlos = ajkpXlos
                        GLajkpXiracc = ajkpXiracc
                        GLajkpXdph = ajkpXdph
                        GLcXijr = cXijr
                        GLcXqpa = cXqpa
                        GLcXcoj = cXcoj
                        GLcXlos = cXlos
                        GLcXiracc = cXiracc
                        GLcXdph =  cXdph
                        GLijrXqpa = ijrXqpa
                        GLijrXcoj = ijrXcoj
                        GLijrXlos = ijrXlos
                        GLijrXiracc =  ijrXiracc
                        GLijrXdph =  ijrXdph
                        GLqpaXcoj = qpaXcoj
                        GLqpaXlos = qpaXlos
                        GLqpaXiracc =   qpaXiracc
                        GLqpaXdph = qpaXdph
                        GLcojXlos = cojXlos
                        GLcojXiracc = cojXiracc
                        GLcojXdph = cojXdph
                        GLlosXiracc =   losXiracc
                        GLlosXdph = losXdph
                        GLiraccXdph = iraccXdph
                        
                        
                        
                        guard let firUser = Auth.auth().currentUser else {return}
                        UserService.ahpPref(firUser) { (user) in
                                          
                                      guard let user = user else {
                                          // handle error
                                          return
                                      }
   }
//
//} else { print("Please log out and log in again")}
        
        
//        for item in itemsForRating {
//            print("Thats the item:  \(item)")
//        }
//
        for rating in ratingStorage {
            print("Thats the rating: \(rating)")
        }
//
//        print("Thats the member ID: ", memberID)
        
}
 

        }
    }

}
// MARK: - Extension

extension AHPRatingPriorityViewController: UITableViewDataSource {


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return leftItems.count

    }


    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {


       }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
        
        let ratingItemLeft = leftItems[indexPath.row]
        let ratingItemRight = rightItems[indexPath.row]
        
        let cell = tableView.dequeueReusableCell(withIdentifier: "RatingPriorityTableViewCell", for: indexPath) as! RatingPriorityTableViewCell

        
//        cell.update()

        cell.leftItems.text = ratingItemLeft
        cell.rightItems.text = ratingItemRight
        


        cell.itemSlider.tag = indexPath.row
        cell.itemSlider.addTarget(self, action: #selector(AHPRatingPriorityViewController.sliderChange(sender:)), for: .valueChanged)
            
        
    
        return cell

        
    }
    
    @objc func sliderChange(sender: UISlider) {
          
           

           // Snap the slider
           let roundedStepValue = round(sender.value / step) * step
           sender.value = roundedStepValue
           
           
           // Get the sliders value
              currentValue = Int(sender.value)
               let row = sender.tag               // get slider's row in table

       
    
        for i in 0..<leftItems.count {
            ratingStorage.insert(currentValue!, at: i)
              
            }
           
           print(#function)
           
//        for rating in ratingStorage {
//            print("Slider has a value of \(currentValue)")

//        }
    }
        
    
}

// MARK: - UITableViewDelegate

extension AHPRatingPriorityViewController: UITableViewDelegate {

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
     return 196
    }
}
import Foundation
import UIKit
import FirebaseDatabase.FIRDataSnapshot

class AHPPriority {
    
    var key: String?
   
    let ajkpXc: Int
    let ajkpXijr: Int
    let ajkpXqpa: Int
    let ajkpXcoj: Int
    let ajkpXlos: Int
    let ajkpXiracc: Int
    let ajkpXdph: Int
    let cXijr: Int
    let cXqpa: Int
    let cXcoj: Int
    let cXlos: Int
    let cXiracc: Int
    let cXdph: Int
    let ijrXqpa: Int
    let ijrXcoj: Int
    let ijrXlos: Int
    let ijrXiracc: Int
    let ijrXdph: Int
    let qpaXcoj: Int
    let qpaXlos: Int
    let qpaXiracc: Int
    let qpaXdph: Int
    let cojXlos: Int
    let cojXiracc: Int
    let cojXdph: Int
    let losXiracc: Int
    let losXdph: Int
    let iraccXdph: Int

    
    init(ajkpXc: Int, ajkpXijr: Int, ajkpXqpa: Int, ajkpXcoj: Int, ajkpXlos: Int, ajkpXiracc: Int, ajkpXdph: Int, cXijr: Int, cXqpa: Int, cXcoj: Int, cXlos: Int, cXiracc: Int, cXdph: Int, ijrXqpa: Int, ijrXcoj: Int, ijrXlos: Int, ijrXiracc: Int, ijrXdph: Int, qpaXcoj: Int,  qpaXlos: Int,   qpaXiracc: Int,  qpaXdph: Int, cojXlos: Int, cojXiracc: Int, cojXdph: Int, losXiracc: Int, losXdph: Int, iraccXdph: Int) {
        
 
                self.ajkpXc = ajkpXc
                self.ajkpXijr = ajkpXijr
                self.ajkpXqpa = ajkpXqpa
                self.ajkpXcoj = ajkpXcoj
                self.ajkpXlos = ajkpXlos
                self.ajkpXiracc = ajkpXiracc
                self.ajkpXdph = ajkpXdph
                self.cXijr = cXijr
                self.cXqpa = cXqpa
                self.cXcoj = cXcoj
                self.cXlos = cXlos
                self.cXiracc = cXiracc
                self.cXdph =  cXdph
                self.ijrXqpa = ijrXqpa
                self.ijrXcoj = ijrXcoj
                self.ijrXlos = ijrXlos
                self.ijrXiracc =  ijrXiracc
                self.ijrXdph =  ijrXdph
                self.qpaXcoj = qpaXcoj
                self.qpaXlos = qpaXlos
                self.qpaXiracc =   qpaXiracc
                self.qpaXdph = qpaXdph
                self.cojXlos = cojXlos
                self.cojXiracc = cojXiracc
                self.cojXdph = cojXdph
                self.losXiracc =   losXiracc
                self.losXdph = losXdph
                self.iraccXdph = iraccXdph
        
        
    }

    var dictValue: [String: Any] {
    let createdAgo = kSecAttrCreationDate
    
    return [
        "created_ago": createdAgo,
        "ajkpXc": ajkpXc,
        "ajkpXijr ": ajkpXijr,
        "ajkpXqpa": ajkpXqpa,
        "ajkpXcoj": ajkpXcoj,
        "ajkpXlos ": ajkpXlos,
        "ajkpXiracc ": ajkpXiracc,
        "ajkpXdph": ajkpXdph,
        "cXijr": cXijr,
        "cXqpa": cXqpa,
        "cXcoj": cXcoj,
        "cXlos": cXlos,
        "cXiracc": cXiracc,
        "cXdph": cXdph,
        "ijrXqpa": ijrXqpa,
        "ijrXcoj": ijrXcoj,
        "ijrXlos": ijrXlos,
        "ijrXiracc": ijrXiracc,
        "ijrXdph": ijrXdph,
        "qpaXcoj": qpaXcoj,
        "qpaXlos": qpaXlos,
        "qpaXiracc": qpaXiracc,
        "qpaXdph": qpaXdph,
        "cojXlos": cojXlos,
        "cojXiracc": cojXiracc,
        "cojXdph": cojXdph,
        "losXiracc": losXiracc,
        "losXdph": losXdph,
        "iraccXdph": iraccXdph ]
     
}
    
    init?(snapshot: DataSnapshot) {
    guard let dict = snapshot.value as? [String: Any],
        
    let ajkpXc = dict["ajkpXc"] as? Int,
    let ajkpXijr = dict["ajkpXijr"] as? Int,
    let ajkpXqpa = dict["ajkpXqpa"] as? Int,
    let ajkpXcoj = dict["ajkpXcoj"] as? Int,
    let ajkpXlos = dict["ajkpXlos"] as? Int,
    let ajkpXiracc = dict["ajkpXiracc"] as? Int,
    let ajkpXdph = dict["ajkpXdph"] as? Int,
    let cXijr = dict["cXijr"] as? Int,
    let cXqpa = dict["cXqpa"] as? Int,
    let cXcoj = dict["cXcoj"] as? Int,
    let cXlos = dict["cXlos"] as? Int,
    let cXiracc = dict["cXiracc"] as? Int,
    let cXdph = dict["cXdph"] as? Int,
    let ijrXqpa = dict["ijrXqpa"] as? Int,
    let ijrXcoj = dict["ijrXcoj"] as? Int,
    let ijrXlos = dict["ijrXlos"] as? Int,
    let ijrXiracc = dict["ijrXiracc"] as? Int,
    let ijrXdph = dict["ijrXdph"] as? Int,
    let qpaXcoj = dict["qpaXcoj"] as? Int,
    let qpaXlos = dict["qpaXlos"] as? Int,
    let qpaXiracc = dict["qpaXiracc"] as? Int,
    let qpaXdph = dict["qpaXdph"] as? Int,
    let cojXlos = dict["cojXlos"] as? Int,
    let cojXiracc = dict["cojXiracc"] as? Int,
    let cojXdph = dict["cojXdph"] as? Int,
    let losXiracc = dict["losXiracc"] as? Int,
    let losXdph = dict["losXdph"] as? Int,
    let iraccXdph = dict["iraccXdph"] as? Int

     else {return nil}
        
        
        self.ajkpXc = ajkpXc
        self.ajkpXijr = ajkpXijr
        self.ajkpXqpa = ajkpXqpa
        self.ajkpXcoj = ajkpXcoj
        self.ajkpXlos = ajkpXlos
        self.ajkpXiracc = ajkpXiracc
        self.ajkpXdph = ajkpXdph
        self.cXijr = cXijr
        self.cXqpa = cXqpa
        self.cXcoj = cXcoj
        self.cXlos = cXlos
        self.cXiracc = cXiracc
        self.cXdph =  cXdph
        self.ijrXqpa = ijrXqpa
        self.ijrXcoj = ijrXcoj
        self.ijrXlos = ijrXlos
        self.ijrXiracc =  ijrXiracc
        self.ijrXdph =  ijrXdph
        self.qpaXcoj = qpaXcoj
        self.qpaXlos = qpaXlos
        self.qpaXiracc =   qpaXiracc
        self.qpaXdph = qpaXdph
        self.cojXlos = cojXlos
        self.cojXiracc = cojXiracc
        self.cojXdph = cojXdph
        self.losXiracc =   losXiracc
        self.losXdph = losXdph
        self.iraccXdph = iraccXdph
        }

}
struct UserService {
    
    static let dateFormatter = ISO8601DateFormatter()
 static func ahpPref(_ firUser: FIRUser, completion: @escaping (User?) -> Void) {
        
        let timestamp = dateFormatter.string(from: Date())
        let ref = Database.database().reference().child("Leader").child(firUser.uid).child("AHPPriority").child(timestamp)
        
        let ahpPriorities = [
        "ajkpXc": GLajkpXc,
        "ajkpXijr ": GLajkpXijr,
        "ajkpXqpa": GLajkpXqpa,
        "ajkpXcoj": GLajkpXcoj,
        "ajkpXlos ": GLajkpXlos,
        "ajkpXiracc ": GLajkpXiracc,
        "ajkpXdph": GLajkpXdph,
        "cXijr": GLcXijr,
        "cXqpa": GLcXqpa,
        "cXcoj": GLcXcoj,
        "cXlos": GLcXlos,
        "cXiracc": GLcXiracc,
        "cXdph": GLcXdph,
        "ijrXqpa": GLijrXqpa,
        "ijrXcoj": GLijrXcoj,
        "ijrXlos": GLijrXlos,
        "ijrXiracc": GLijrXiracc,
        "ijrXdph": GLijrXdph,
        "qpaXcoj": GLqpaXcoj,
        "qpaXlos": GLqpaXlos,
        "qpaXiracc": GLqpaXiracc,
        "qpaXdph": GLqpaXdph,
        "cojXlos": GLcojXlos,
        "cojXiracc": GLcojXiracc,
        "cojXdph": GLcojXdph,
        "losXiracc": GLlosXiracc,
        "losXdph": GLlosXdph,
        "iraccXdph": GLiraccXdph ]
        
       ref.setValue(ahpPriorities) { (error, ref) in
        if let error = error {
                     assertionFailure(error.localizedDescription)
                     return completion(nil)
                 }

                 ref.observeSingleEvent(of: .value, with: { (snapshot) in
                     let user = User(snapshot: snapshot)
                     completion(user)
                 })
             }
         }

        
}

您编写了很多代码,我认为我们的案例不需要这些代码。首先,将 ratingStorage 数组和替换为一个以字符串为键,以 int 为值的字典

var ratingStorage = [String: Int]()

你可以用你的行作为键和滑块的默认值初始化它,如果它没有改变

函数内部'sliderChange'你做错了只需替换代码

for i in 0..<leftItems.count {
        ratingStorage.insert(currentValue!, at: i)
          
        }

ratingStorage[row] = currentValue

在 saveRating 函数中删除所有 useLess 代码并简单地打印 ratingStorage 字典,它将包含行作为键和“滑块值”作为它的值。就是这样,希望它能提供一个解决方案。