You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:58:55