Swift中如何获取Picker选中项的标题及详情(姓名、姓氏等)
解决方法:切换到二维数组后获取选中项详情并展示
没问题,咱们直接修改代码来实现你要的功能——用二维数组myArray2存储学生信息,选中Picker里的学生后,点击按钮就能在Label里显示他的姓名、姓氏和生日。
修改后的完整代码:
import UIKit class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { // 二维数组:每个元素对应 [名字, 姓氏, 出生年份] var myArray2 = [["Alex", "de Souza", "1977"],["Ariel", "Ortega", "1974"],["Lefter", "KucukAndonyadis", "1925"]] var selectedStudent: [String]? // 直接存储选中的学生数组,比单独维护多个变量更简洁 @IBOutlet weak var lblResult: UILabel! @IBOutlet weak var pickerStudent: UIPickerView! override func viewDidLoad() { super.viewDidLoad() pickerStudent.delegate = self pickerStudent.dataSource = self } // Picker每行显示学生的全名(名字+姓氏),让选项更直观 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { let student = myArray2[row] return "\(student[0]) \(student[1])" } // 返回学生的总数 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return myArray2.count } func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } // 选中某一行时,保存对应的学生完整信息 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { selectedStudent = myArray2[row] } // 点击按钮时,把选中的学生信息格式化为友好的文本展示在Label里 @IBAction func buttonClick(_ sender: Any) { guard let student = selectedStudent else { lblResult.text = "请先选择一个学生" return } let name = student[0] let lastName = student[1] let birthYear = student[2] lblResult.text = "姓名:\(name) \(lastName)\n出生年份:\(birthYear)" } }
关键修改点说明:
- 替换数据源数组:直接用
myArray2替代原来的一维数组,每个子数组对应一个学生的完整信息。 - 优化Picker显示:
titleForRow方法里拼接名字和姓氏,让Picker的选项更清晰,用户能快速识别要选的学生。 - 简化数据存储:用
selectedStudent这个可选数组直接存储选中的学生信息,避免维护多个独立变量的麻烦。 - 完善按钮逻辑:先判断是否选中了学生,再把信息格式化为换行的文本,提升展示效果。
如果你习惯保留原来的独立变量(比如nameValueOfSelectedItem这类),也可以改成下面的写法:
// 保留原变量 var nameValueOfSelectedItem = "" var lastnameValueOfSelectedItem = "" var bdateOfSelectedItem = 0 // 修改didSelectRow方法 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { let student = myArray2[row] nameValueOfSelectedItem = student[0] lastnameValueOfSelectedItem = student[1] // 把字符串转成Int,加默认值0防止转换失败 bdateOfSelectedItem = Int(student[2]) ?? 0 } // 修改按钮点击方法 @IBAction func buttonClick(_ sender: Any) { lblResult.text = "姓名:\(nameValueOfSelectedItem) \(lastnameValueOfSelectedItem)\n出生年份:\(bdateOfSelectedItem)" }
两种写法都能实现需求,看你个人习惯选择就好~
内容的提问来源于stack exchange,提问作者mannyCalavera
相关产品推荐
相关产品推荐

