如何在两个ViewController间传递UIPickerView等控件的选中值
UIPickerView、分段控件和步进器的Segue传值方法
你已经掌握了文本框的Segue传值逻辑,其实UIPickerView、分段控件(UISegmentedControl)和步进器(UIStepper)的传值思路完全一致——在prepare(for:sender:)方法里获取当前控件的选中/当前值,再赋值给目标ViewController的对应属性。
前提准备
确保你已经给这三个控件添加了IBOutlet关联(比如命名为myPickerView、mySegmentControl、myStepper),同时在ViewController2里定义好接收值的属性,比如:
// ViewController2.swift var pickerSelectedText: String? var segmentSelectedIndex: Int? var segmentSelectedTitle: String? var stepperCurrentValue: Double?
1. UIPickerView 传值
UIPickerView需要先获取选中的行索引,再从你的数据源数组里取出对应内容:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let viewController2 = segue.destination as? ViewController2 { // 假设你的UIPickerView数据源是这个数组 let pickerOptions = ["苹果", "香蕉", "橙子", "葡萄"] // 获取选中的行(component:0 指第一个滚轮,多滚轮的话按需修改) let selectedRow = myPickerView.selectedRow(inComponent: 0) // 取出对应内容并传值 viewController2.pickerSelectedText = pickerOptions[selectedRow] } }
2. 分段控件(UISegmentedControl)传值
分段控件可以直接获取选中的索引或标题:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let viewController2 = segue.destination as? ViewController2 { // 获取选中的索引 let selectedIndex = mySegmentControl.selectedSegmentIndex viewController2.segmentSelectedIndex = selectedIndex // 或者获取选中的标题(注意判断索引是否有效) if selectedIndex != UISegmentedControl.noSegment { viewController2.segmentSelectedTitle = mySegmentControl.titleForSegment(at: selectedIndex) } } }
3. 步进器(UIStepper)传值
步进器直接读取value属性即可(默认是Double类型):
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let viewController2 = segue.destination as? ViewController2 { viewController2.stepperCurrentValue = myStepper.value } }
整合多个控件的传值
如果需要同时传递多个控件的值,直接把逻辑合并到同一个prepare方法里就行:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { guard let viewController2 = segue.destination as? ViewController2 else { return } // UIPickerView传值 let pickerOptions = ["苹果", "香蕉", "橙子", "葡萄"] let selectedPickerRow = myPickerView.selectedRow(inComponent: 0) viewController2.pickerSelectedText = pickerOptions[selectedPickerRow] // 分段控件传值 let selectedSegmentIndex = mySegmentControl.selectedSegmentIndex viewController2.segmentSelectedIndex = selectedSegmentIndex if selectedSegmentIndex != UISegmentedControl.noSegment { viewController2.segmentSelectedTitle = mySegmentControl.titleForSegment(at: selectedSegmentIndex) } // 步进器传值 viewController2.stepperCurrentValue = myStepper.value }
内容的提问来源于stack exchange,提问作者nothing
相关产品推荐
相关产品推荐

