选择器值到 tableView swift
Picker Value into tableView swift
第一个文本字段是一个 Int 值,您可以在其中插入当前已售出的商品。第二个文本字段,我在其中获取一些 Int 值并使用按钮添加到 tableView。您添加到第二个文本字段中的值是主值(在这种情况下为 2500)。效果很好。
我的问题是将 PickerValue 归因于 TableRow 值。它在工作,但不像我想要的那样。
我想在单击按钮时保存 pickerValue。但是当我输入一个新值时,它会改变 pickerValue 的所有行。在这种情况下,您可以看到两行“电话”。通常它会是“电话”和其他东西(“maison”或“房子”)。
你知道为什么会这样吗?希望你能明白我的意思。
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)
}
//------------------------ 结束选择器---------------- --------------------
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 weak var 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
}
}
你的问题不是很清楚
但是,我会尝试从您的代码中提取的内容中提供一些帮助。
我假设 restValueLabel
不是你细胞内的东西?大概是你截图中的绿色标签“2500”吧?
如果是这样,请不要在 cellForRow(at:)
中设置它。每次单元格变得可见时都会调用此方法,并且应该 仅 用于根据您的数据源配置该单元格 (arrayRessource
)。
而是创建一个方法 updateRestValueLabel()
来迭代您的数据源,进行计算并为您的 restValueLabel
设置适当的值。每次您的数据源更改时调用该方法,因此连同 tableRessourceOT.reloadData()
.
您的代码也存在一些风格问题(例如,避免强制展开 !
除非您有充分的理由使用它)但这超出了此处的范围。
问题出在我的数组是 Int 数组,而我的 pickerValue 是 String 数组。
数组不能是 String 数组和 Int 数组。
var arrayRessource: [String] = [] {
didSet {
if oldValue != arrayRessource {
userDefault.setValue(arrayRessource, forKey: arrayKey)
}
}
}
感谢您的建议,我正在进步并尽我所能
第一个文本字段是一个 Int 值,您可以在其中插入当前已售出的商品。第二个文本字段,我在其中获取一些 Int 值并使用按钮添加到 tableView。您添加到第二个文本字段中的值是主值(在这种情况下为 2500)。效果很好。
我的问题是将 PickerValue 归因于 TableRow 值。它在工作,但不像我想要的那样。
我想在单击按钮时保存 pickerValue。但是当我输入一个新值时,它会改变 pickerValue 的所有行。在这种情况下,您可以看到两行“电话”。通常它会是“电话”和其他东西(“maison”或“房子”)。
你知道为什么会这样吗?希望你能明白我的意思。
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)
}
//------------------------ 结束选择器---------------- --------------------
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 weak var 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
}
}
你的问题不是很清楚
但是,我会尝试从您的代码中提取的内容中提供一些帮助。
我假设 restValueLabel
不是你细胞内的东西?大概是你截图中的绿色标签“2500”吧?
如果是这样,请不要在 cellForRow(at:)
中设置它。每次单元格变得可见时都会调用此方法,并且应该 仅 用于根据您的数据源配置该单元格 (arrayRessource
)。
而是创建一个方法 updateRestValueLabel()
来迭代您的数据源,进行计算并为您的 restValueLabel
设置适当的值。每次您的数据源更改时调用该方法,因此连同 tableRessourceOT.reloadData()
.
您的代码也存在一些风格问题(例如,避免强制展开 !
除非您有充分的理由使用它)但这超出了此处的范围。
问题出在我的数组是 Int 数组,而我的 pickerValue 是 String 数组。
数组不能是 String 数组和 Int 数组。
var arrayRessource: [String] = [] {
didSet {
if oldValue != arrayRessource {
userDefault.setValue(arrayRessource, forKey: arrayKey)
}
}
}
感谢您的建议,我正在进步并尽我所能