Swift UIPickerView 使用 IBAction 触发 Segue
Swift UIPickerView Trigger Segue with IBAction
我是 Swift 的新手,可以使用一些关于如何在单击按钮时使用 IBAction 触发 segue 的建议。我可以使用选择器进行 segue,但是我希望按钮触发 segue。我尝试触发 IBAction 中的函数,但它不起作用。感谢任何建议。谢谢
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
switch (row) {
case 0: self.performSegueWithIdentifier("Segue0", sender: self)
break;
case 1: self.performSegueWithIdentifier("Segue1", sender: self)
break;
case 2: self.performSegueWithIdentifier("Segue2", sender: self)
break;
case 3: self.performSegueWithIdentifier("Segue3", sender: self)
break;
case 4: self.performSegueWithIdentifier("Segue4", sender: self)
break;
default: break;
}
这是标准按钮:
@IBAction func selectButton(sender: AnyObject) {
}
我设法使用以下方法让它工作。将不胜感激任何评论或更优雅的解决方案。 :)
添加了一个全局变量来保存选择器行:
var rowSelected = 0
var pickerData: [String] = [String]()
override func viewDidLoad() {
super.viewDidLoad()
// Connect data:
self.locationPicker.delegate = self
self.locationPicker.dataSource = self
pickerData = ["Location 1", "Location 2", "Location 3", "Location 4", "Location 5"]
// The number of columns of data
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
// The number of rows of data
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return pickerData.count
}
// The data to return for the row and component (column) that's being passed in
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return "\(pickerData[row])"
}
// Capture the picker view selection
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
rowSelected = row
}
@IBAction func selectButton(sender: AnyObject) {
switch (rowSelected) {
case 0: self.performSegueWithIdentifier("Segue0", sender: self)
break;
case 1: self.performSegueWithIdentifier("Segue1", sender: self)
break;
case 2: self.performSegueWithIdentifier("Segue2", sender: self)
break;
case 3: self.performSegueWithIdentifier("Segue3", sender: self)
break;
case 4: self.performSegueWithIdentifier("Segue4", sender: self)
break;
default: break;
}
如果您要查找的只是如何确定从按钮函数中选择了哪一行,您可以使用 UIPickerView.selectedRowInComponent(_:):
@IBOutlet weak var picker: UIPickerView! // Reference to picker from storyboard.
@IBAction func selectButton(sender: AnyObject) {
// Get the selected row. You only have one component, so the parameter is 0.
let row = picker.selectedRowInComponent(0)
// Switch block here
}
如果实际上你的 segues 实际上被命名为 "Segue0"、"Segue1" 等,那么你可以将 switch 块替换为:
self.performSegueWithIdentifier("Segue\(row)", sender: self)
但是,如果您使用的是更具描述性的转场名称(正如我希望的那样),那么您也可以将转场标识符存储在一个数组中,并只使用 row
作为数组的索引:
let segues = ["thisIsASegue", "thisIsAnotherSegue", "etc"]
// In the function:
self.performSegueWithIdentifier(segues[row], sender: self)
我是 Swift 的新手,可以使用一些关于如何在单击按钮时使用 IBAction 触发 segue 的建议。我可以使用选择器进行 segue,但是我希望按钮触发 segue。我尝试触发 IBAction 中的函数,但它不起作用。感谢任何建议。谢谢
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
switch (row) {
case 0: self.performSegueWithIdentifier("Segue0", sender: self)
break;
case 1: self.performSegueWithIdentifier("Segue1", sender: self)
break;
case 2: self.performSegueWithIdentifier("Segue2", sender: self)
break;
case 3: self.performSegueWithIdentifier("Segue3", sender: self)
break;
case 4: self.performSegueWithIdentifier("Segue4", sender: self)
break;
default: break;
}
这是标准按钮:
@IBAction func selectButton(sender: AnyObject) {
}
我设法使用以下方法让它工作。将不胜感激任何评论或更优雅的解决方案。 :)
添加了一个全局变量来保存选择器行:
var rowSelected = 0
var pickerData: [String] = [String]()
override func viewDidLoad() {
super.viewDidLoad()
// Connect data:
self.locationPicker.delegate = self
self.locationPicker.dataSource = self
pickerData = ["Location 1", "Location 2", "Location 3", "Location 4", "Location 5"]
// The number of columns of data
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
// The number of rows of data
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return pickerData.count
}
// The data to return for the row and component (column) that's being passed in
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return "\(pickerData[row])"
}
// Capture the picker view selection
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
rowSelected = row
}
@IBAction func selectButton(sender: AnyObject) {
switch (rowSelected) {
case 0: self.performSegueWithIdentifier("Segue0", sender: self)
break;
case 1: self.performSegueWithIdentifier("Segue1", sender: self)
break;
case 2: self.performSegueWithIdentifier("Segue2", sender: self)
break;
case 3: self.performSegueWithIdentifier("Segue3", sender: self)
break;
case 4: self.performSegueWithIdentifier("Segue4", sender: self)
break;
default: break;
}
如果您要查找的只是如何确定从按钮函数中选择了哪一行,您可以使用 UIPickerView.selectedRowInComponent(_:):
@IBOutlet weak var picker: UIPickerView! // Reference to picker from storyboard.
@IBAction func selectButton(sender: AnyObject) {
// Get the selected row. You only have one component, so the parameter is 0.
let row = picker.selectedRowInComponent(0)
// Switch block here
}
如果实际上你的 segues 实际上被命名为 "Segue0"、"Segue1" 等,那么你可以将 switch 块替换为:
self.performSegueWithIdentifier("Segue\(row)", sender: self)
但是,如果您使用的是更具描述性的转场名称(正如我希望的那样),那么您也可以将转场标识符存储在一个数组中,并只使用 row
作为数组的索引:
let segues = ["thisIsASegue", "thisIsAnotherSegue", "etc"]
// In the function:
self.performSegueWithIdentifier(segues[row], sender: self)