如何使用 UIButton 删除 pickerView 中的选定位置?
How can I delete the selected location in a pickerView using a UIButton?
我正在尝试使用 UIButton 删除 pickerView 的元素,但在连续删除 3 个元素后我收到错误消息(索引超出范围)。
对不起我的英语不好我还年轻,住在德国:D
import UIKit
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
@IBOutlet weak var textFiled: UITextField!
@IBOutlet weak var pickerView: UIPickerView!
var Array = ["Blue", "Green", "Red", "White", "Grey"]
var indexOfPicker = Int()
override func viewDidLoad() {
super.viewDidLoad()
pickerView.dataSource = self
pickerView.delegate = self
}
@IBAction func minusButton(_ sender: UIButton) {
if Array.count != 0 {
Array.remove(at: indexOfPicker)
pickerView.reloadAllComponents()
}
}
@IBAction func plusButton(_ sender: UIButton) {
if textFiled.text != "" {
Array.append(textFiled.text!)
pickerView.reloadAllComponents()
}
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return Array.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return Array[row]
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
indexOfPicker = row
}
}
感谢您的帮助!
这个
if Array.count != 0 {
并不意味着你可以删除这个索引indexOfPicker
,我认为你需要这个
if indexOfPicker < Array.count {
我猜你只从 pickerView select 一次(当计数为 5 时,这意味着 indexOfPicker
在 0...4 中)然后点击 minusButton 3 次
只需替换您的函数
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return Array[row]
}
有
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
indexOfPicker = row
return pickerArray[row]
}
问题
当您从数组索引中删除一个元素时,索引没有得到更新,因为 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
仅在您更改选择器中的值时调用 当交互时
但是在重新加载时您需要更新索引,因此每次重新加载选择器时都会调用 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int)
,这会在您重新加载或更新数组时更新您选择的索引
工作输出
我正在尝试使用 UIButton 删除 pickerView 的元素,但在连续删除 3 个元素后我收到错误消息(索引超出范围)。
对不起我的英语不好我还年轻,住在德国:D
import UIKit
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
@IBOutlet weak var textFiled: UITextField!
@IBOutlet weak var pickerView: UIPickerView!
var Array = ["Blue", "Green", "Red", "White", "Grey"]
var indexOfPicker = Int()
override func viewDidLoad() {
super.viewDidLoad()
pickerView.dataSource = self
pickerView.delegate = self
}
@IBAction func minusButton(_ sender: UIButton) {
if Array.count != 0 {
Array.remove(at: indexOfPicker)
pickerView.reloadAllComponents()
}
}
@IBAction func plusButton(_ sender: UIButton) {
if textFiled.text != "" {
Array.append(textFiled.text!)
pickerView.reloadAllComponents()
}
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return Array.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return Array[row]
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
indexOfPicker = row
}
}
感谢您的帮助!
这个
if Array.count != 0 {
并不意味着你可以删除这个索引indexOfPicker
,我认为你需要这个
if indexOfPicker < Array.count {
我猜你只从 pickerView select 一次(当计数为 5 时,这意味着 indexOfPicker
在 0...4 中)然后点击 minusButton 3 次
只需替换您的函数
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return Array[row]
}
有
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
indexOfPicker = row
return pickerArray[row]
}
问题
当您从数组索引中删除一个元素时,索引没有得到更新,因为 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
仅在您更改选择器中的值时调用 当交互时
但是在重新加载时您需要更新索引,因此每次重新加载选择器时都会调用 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int)
,这会在您重新加载或更新数组时更新您选择的索引
工作输出