选择器值到 tableView swift

Posted

技术标签:

【中文标题】选择器值到 tableView swift【英文标题】:Picker Value into tableView swift 【发布时间】:2021-07-17 09:54:51 【问题描述】:

第一个文本字段是一个 Int Value,您可以在其中插入当前已售出的商品。第二个文本字段,我在其中获取一些 Int 值并使用按钮添加到 tableView。您添加到第二个文本字段中的值将提取到主值(在这种情况下为 2500 )。效果很好。

我的问题是将 PickerValue 归因于 TableRow 值。它工作正常,但不像我想要的那样。

我想在单击按钮时保存 pickerValue。但是当我输入一个新值时,它会改变pickerValue的所有行。在这种情况下,您可以看到两行带有“电话”的信息。通常它是“电话”和其他东西(“maison”或“house”)。

你看到它这样做的原因吗?我希望你能明白我的意思。

problem with picker value save into table view (gif)

    @IBAction func addBtn(_ sender: Any) 
    
    view.endEditing(true)

    salaire = Int(salaireLabel.text!) ?? 0
    valeur =  Int(ressourceTextField.text!) ?? 0
    
    if  String(valeur) != "" 
        
        addBtnActivated = true
        
        restValueLabel.textColor = UIColor.blue
        
        arrayRessource.append(valeur)
        

        // modifie automatiquement le salaire
        restValueLabel.text = String(soustraction)
    
        tableRessourceOT.reloadData()
        
        // reset le champs
        ressourceTextField.text = ""
        picker.selectRow(0, inComponent: 0, animated: true)
    
    


这是我正在使用的一些代码。我认为问题来自 tableview Func

var arrayPickerValue: [String] = ["", "maison", "telephone"] 

// ------------------------------ START PICKER ------------------------------------

func numberOfComponents(in pickerView: UIPickerView) -> Int 
    return 1


func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int 
    print("-----arraypicker.count------")
    print(arrayPickerValue.count)
    return arrayPickerValue.count


// hauteur du picker pour que les images ne se supperpose pas / Picker height
  func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat 
 return 25
 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? 
    print("----arraypicker[row]----")
    print(arrayPickerValue[row])
    return arrayPickerValue[row]


func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 
    stored = arrayPickerValue[row]
    print("-----stored dans func didselectrow------")
    print(stored as Any)

//-------------------------- END PICKER ----------------- ------------------

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
    let row = indexPath.row
    let value =  arrayRessource[row]

    
    cell.textLabel?.text = "- " + String(value) + " €"
        
  //  cell.detailTextLabel?.text =
    
    updateRestLabel()
    
    setRestLabel()
  
    return cell

这是我的出路:

@IBOutlet 弱变量 tableRessourceOT: UITableView!

然后是我的 arrayRessource :

    var arrayRessource: [Int] = [] 
    didSet 
        if oldValue != arrayRessource 
            userDefault.setValue(arrayRessource, forKey: arrayKey)
        
    

并使用函数调用:

    func getArray() 
    if let newArray = userDefault.array(forKey: arrayKey) as? [Int] 
        arrayRessource = newArray
    

【问题讨论】:

在我的 viewdidLoad 中有这样的委托:picker.delegate = self picker.dataSource = self 您的选择器视图的didSelectRow 方法将用户选择的行保存在变量“stored. You never reference that variable anywhere else in your code. You never show the button code that is supposed to add a picker value to your table view, you never show how you changed your arrayRessource”中,该变量为您的表视图提供数据,您没有解释选择器视图中的值如何( 2500)与表格视图中的条目相关(-2 欧元等)。你需要提供更多、更清晰的关于你的应用程序应该如何工作的信息。 (编辑您的问题,不要添加 cmets。) 如何使用 PickerView 字符串填充我的 Int TableView ?我认为这是我的问题你怎么看? 【参考方案1】:

你的问题不是很清楚。 不过,我会尝试从您的代码中提取的内容中提供一些帮助。

我认为restValueLabel 不是你细胞中的东西?大概是你截图中的绿色标签“2500”吧? 如果是这种情况,请不要在cellForRow(at:) 中设置它。每次单元格变得可见时都会调用此方法,并且应该用于根据您的数据源 (arrayRessource) 配置该单元格。

而是创建一个方法updateRestValueLabel() 来迭代您的数据源,进行计算并将适当的值设置为您的restValueLabel。每次您的数据源发生更改时调用该方法,因此与 tableRessourceOT.reloadData() 一起调用。

您的代码也存在一些风格问题(例如,除非您有充分的理由使用它,否则请避免强制展开 !),但这超出了这里的范围。

【讨论】:

restValueLabel 是已售标签的来源和表中的值。【参考方案2】:

问题来自我的数组是一个 Int 数组,而我的 pickerValue 是 String 数组。

数组不能是String数组和Int数组。

    var arrayRessource: [String] = [] 
    didSet 
        if oldValue != arrayRessource 
            userDefault.setValue(arrayRessource, forKey: arrayKey)
        
    

感谢您对我的进步和尽力而为的建议

【讨论】:

以上是关于选择器值到 tableView swift的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin 为 UI 测试形成更改时间选择器值

每当我选择微调器值时如何隐藏标签?

来自先前选择器的选择器值 - CoreData/SwiftUI

如何将颤动的日期选择器值添加到文本字段?

更改时发布日期选择器值

SwiftUI 从 CoreData 设置初始选择器值