【问题标题】:UITableView + UISlider. Save Value for specific Index in ArrayUITableView + UISlider。保存数组中特定索引的值
【发布时间】:2020-10-12 00:58:21
【问题描述】:

我有一个调查表视图,如图所示。我想将每一行的最终值保存在特定索引处。例如,“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)
                 })
             }
         }

        
}

【问题讨论】:

  • 分享你的代码,这样我就可以尝试得到你想要的解决方案。

标签: ios arrays swift uitableview uislider


【解决方案1】:

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

var ratingStorage = [String: Int]()

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

在函数 'sliderChange' 中你犯的错误只是替换代码

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

ratingStorage[row] = currentValue

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

【讨论】:

  • 嘿@muhammad,感谢您的快速回复!我尝试了您的方法,似乎几乎可以正常工作。但它根本没有设置正确的值。既不是正确的值,也不是正确的键。可能是因为 UISlider 在“滑动”时传递了每个值。也许你可以给我另一个提示如何解决最后一个“问题”:)
  • 嘿,@Schaedel420 这可能不是问题,因为如果行 Sitrng 是相同的,无论滑块传递多少值,我们将始终拥有最新的。在将滑块更改功能保存到 ratingStorage 字典之前,您可以打印并告诉里面的行和 currentValue 是什么吗?
  • 好的。所以我使用 rightItems 作为键,这样我们可以更好地看到具体的行。第 1 行:创造力 --> 打印声明(对于第 1 行:可选(“人际关系、态度、沟通技巧、合作”),我们有值:可选(9))对于第 2 行:它给了我“创造力”的值” 第 3 行:也是创造力 第 4 行:组织和主管忠诚度......总的来说,正如你所看到的,这有点奇怪。我希望这个答案不会太奇怪
  • 你为什么使用正确的项目作为键,因为我已经提到使用行作为你通过这一行创建的键 let row = sender.tag 在你的 sliderChange 函数中我假设你已经设置了发件人(这是您当前正在更改的 UISlider ) 标记到界面构建器内的行字符串或以编程方式。如果我的假设是错误的,那么首先将所有滑块的标签设置为它们的行字符串,即第一个滑块标签将是 ajkpXc 等等。这将完美地工作。振作起来,我们会成功的:)
  • 你是个传奇!问题是,我得到了这个错误:无法将'Int'类型的值转换为预期的参数类型'String'......当我使用sender.tag中的行时
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-27
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多