Ios 选择后如何使用选择器获取一些值?
我有一个选择器,它从元组列表中读取数据,并有一些关于如何使其工作的问题。我想做的是,选择器显示一些字符串,当用户进行选择时,与字符串对应的值将保存到变量中。然后我想在函数中使用这个变量来计算一些东西,并将计算结果打印给用户。我目前有:Ios 选择后如何使用选择器获取一些值?,ios,swift,xcode,swiftui,swiftui-picker,Ios,Swift,Xcode,Swiftui,Swiftui Picker,我有一个选择器,它从元组列表中读取数据,并有一些关于如何使其工作的问题。我想做的是,选择器显示一些字符串,当用户进行选择时,与字符串对应的值将保存到变量中。然后我想在函数中使用这个变量来计算一些东西,并将计算结果打印给用户。我目前有: @State private var rating: Int = 0 func scale(rating: Float, someValue1: Float, someValue2: Float) -> Float{ return (rating
@State private var rating: Int = 0
func scale(rating: Float, someValue1: Float, someValue2: Float) -> Float{
return (rating + someValue1 * 2.5 + someValue2 * 1.5) / 10
}
var arrayOfTuples: [(score: String, value: Int)] = [
(score: "A+", value: 60),
(score: "A", value: 55),
(score: "A-", value: 50),
(score: "B+", value: 45),
(score: "B", value: 40),
(score: "B-", value: 35),
(score: "C+", value: 30),
(score: "C", value: 25),
(score: "C-", value: 20),
(score: "D+", value: 15),
(score: "D", value: 10),
(score: "D-", value: 5),
(score: "F", value: 0)
]
Picker(selection: $rating, label: Text("Choose")) {
ForEach(0 ..< arrayOfTuples.count) {
Text(self.arrayOfTuples[$0].score)
}
}
此外,所有这些都是在Xcode中创建应用程序时创建的ContentView结构中完成的,因此我不知道是否在声明和定义函数,如果有更好的方法,请告诉我
此外,选择器是默认选择器。我更喜欢使用轮式捡拾器,但是当我使用它时,它会显示在主屏幕上,我更喜欢只有当用户按下选择按钮时,它才会弹出
最后,正如您在按钮中看到的,操作正在打印值。但是,我不想打印该值,而是通过弹出框或用户可以看到的其他地方将其显示给用户
有什么办法吗?提前非常感谢您。要完成所有要求,您需要做很多事情,但让我们从picker view的基础知识开始。您需要遵守Picker View数据源和委托协议,然后实现Picker View所需的方法。下面是一个例子:
class PickerViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
//...rating and tuple variables
overide func viewDidLoad() {
let pickerView = UIPickerView()
pickerView.dataSource = self
pickerView.delegate = self
self.view.addSubview(pickerView)
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return arrayOfTuples.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return arrayOfTuples[row].score
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
rating = arrayOfTuples[row].value
}
}
在评级变量中存储选择器值的关键是didSelectRow方法。我编写的代码示例只是采用了一个普通的选择器视图,并将其添加到视图控制器的视图中,而没有考虑放置、约束或其他任何内容,因此它并不漂亮,但它演示了如何使用选择器视图来选择数据。如果希望弹出并隐藏选择器视图,有几种方法可以做到这一点,包括将子视图添加到其他视图的顶部,将其从其超级视图中删除,或显示新的视图控制器。你在Swift上有多熟悉?我对C++和Python很有经验,但对SWIFT一无所知,这就是我为什么挣扎的原因。您在那里定义的类(PickerViewController),我应该在哪里编写它?在ContentView.swift中?AppDelegate文件?SceneDelegate文件?我不确定所有的东西都到哪里去了,所以我只是在ContentView中做所有的事情。在线资源也很难找到,因为它不能解释我要找的是什么,而且很难理解,因为几乎没有快速的经验。@SantiagoMedina-不用担心,它可以很快吸收,特别是来自其他语言。PickViewController只是视图控制器子类的一个任意示例,我猜您已经有了一个ViewController,它可能是您的ContentView,因此您可以将代码(而不是类声明)复制到ContentView swift文件中并进行尝试。现在不要担心AppDelegate或SceneDelegate文件,您只需要关注单个视图控制器及其视图/子视图,直到熟悉该排列。
class PickerViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
//...rating and tuple variables
overide func viewDidLoad() {
let pickerView = UIPickerView()
pickerView.dataSource = self
pickerView.delegate = self
self.view.addSubview(pickerView)
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return arrayOfTuples.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return arrayOfTuples[row].score
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
rating = arrayOfTuples[row].value
}
}