gpt4 book ai didi

ios - 为什么我不能在选择器 View 列表中选择我的第一个数据?

转载 作者:搜寻专家 更新时间:2023-11-01 06:28:41 25 4
gpt4 key购买 nike

所以我在 View Controller 中有一个按钮,如果我点击该标签,它会显示一个弹出窗口,实际上是一个选择器 View 。

我将使用 present 模态显示弹出的选择器 View ,使用下面的代码

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let popup = storyboard.instantiateViewController(withIdentifier: "dataPickerPopup") as! DataPickerPopUpVC
popup.delegate = self
popup.selectionList = ["R16G","R22G"]
popup.titlePopup = "UNITS"
popup.startingData = availableUnits[0]
present(popup, animated: true, completion: nil)

弹出的选择器 View 将如下所示: enter image description here

我在popupVC中使用的代码是这样的:

import UIKit


protocol DataPickerPopupDelegate {
func selectedValueFromPopUp (data: String)
}



class DataPickerPopUpVC: UIViewController {

@IBOutlet weak var titlePopupLabel: UILabel!
@IBOutlet weak var pickerView: UIPickerView!
@IBOutlet weak var saveButton: UIButton!

var selectionList : [String]!
var pickedData = ""
var startingData = ""
var titlePopup = ""

var delegate : DataPickerPopupDelegate?



override func viewDidLoad() {
super.viewDidLoad()

pickerView.delegate = self
setPickerViewStartingPosition()
titlePopupLabel.text = titlePopup

}


@IBAction func saveButtonDidPressed(_ sender: Any) {

// picked data will be sent to caller VC using protocol delegate pattern.

delegate?.selectedValueFromPopUp(data: pickedData)
dismiss(animated: true, completion: nil)
}


@IBAction func closeReusablePopup(_ sender: Any) {
dismiss(animated: true, completion: nil)
}




}

extension DataPickerPopUpVC {
// MARK: - Helper Methods

func setPickerViewStartingPosition() {
let index = selectionList.index(of: startingData)
pickerView.selectRow(index ?? 0, inComponent: 0, animated: false)
}
}



// MARK: - Picker View Delegate & Data Source
extension DataPickerPopUpVC : UIPickerViewDelegate, UIPickerViewDataSource {

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

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return selectionList.count
}


func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
pickedData = selectionList[row]
}


func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
let pickerLabel = UILabel()
if UIDevice.current.userInterfaceIdiom == .pad {
pickerLabel.font = UIFont.systemFont(ofSize: 40)
pickerLabel.text = selectionList[row]
pickerLabel.textAlignment = .center
} else if UIDevice.current.userInterfaceIdiom == .phone {
pickerLabel.font = UIFont.systemFont(ofSize: 25)
pickerLabel.text = selectionList[row]
pickerLabel.textAlignment = .center
}
return pickerLabel
}



}

用户按下“选择”按钮后,它将使用委托(delegate)模式将选定的单元发送回调用者 VC。

但是我这里有问题。如您所见,选择器 View 的起始位置始终为“R16G”。如果我在选择器 View 弹出后直接按下“选择”按钮,它似乎总是给我一个空的所选数据字符串。似乎 didSelectRow 没有被触发。

但如果我从“R16G”向下滚动到“R22G”,然后按“选择”按钮,它将给出字符串“R22G”。如果我选择 R22G,我没有问题。

如果我从“R16G”向下滚动到“R22G”,然后再次返回到“R16G”,然后按“选择”按钮,它会给我字符串“R16G”,它会按预期工作。

如果我不先向下滚动,选择器 View 的第一个列表似乎不会返回字符串值。

这是我的问题的 .gif 文件:http://g.recordit.co/fRnvVJ2hi0.gif

我该如何解决这个问题?提前致谢:)

最佳答案

您可以将数组的第一个值存储为已选择,并且在 didSelect 中您可以使用当前值更新该变量。

所以在 viewDidLoad() 中添加这些行:

if !selectionList.isEmpty {
pickedData = selectionList[0]
}

关于ios - 为什么我不能在选择器 View 列表中选择我的第一个数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50325302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com