@IBAction执行Segue

时间:2016-10-03 12:30:25

标签: ios swift xcode

我有以下内容:

class Settings: UIViewController {

@IBAction func CitySend(sender: AnyObject) {
    self.performSegue(withIdentifier: "senddata", sender: self)
}

@IBOutlet weak var textField: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}
   override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "senddata" {
        let Mainview = segue.destination as! ViewController
        Mainview.label = textField.text!
    }
   }
}

我的主视图如下:

class ViewController: UIViewController {

@IBOutlet var city: UILabel!
var label: String = ""


override func viewDidLoad() {
    super.viewDidLoad()


    city.text = label
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}

我不确定,如果这是我应该怎么做的,但对我来说逻辑是我只想让这个segue在我的主视图中传递一个字符串到我的标签如果按下按钮(就像保存一样)按钮)

然而,至于我现在所做的,没有任何反应,只要按下按钮,它就会给我1:信号SIGABRT错误。

2 个答案:

答案 0 :(得分:0)

@IBAction func CitySend(sender: AnyObject) {
    self.performSegue(withIdentifier: "senddata", sender: textField.text)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    switch (segue.identifier, segue.destination, sender) {
    case (.Some("senddata"), let controller as ViewController, let text as String):
        controller.label = text
    default:
        break
    }
}

答案 1 :(得分:0)

使用以下代码:

ViewController.swift

 import UIKit

class ViewController: UIViewController, SecondViewControllerProtocol{
    @IBOutlet weak var dataLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func navigateToSecondViewControllerOnButtonClick(_ sender: AnyObject) {

        let  secondVC: ViewController2 = storyboard?.instantiateViewController(withIdentifier: "viewcont2") as! ViewController2
        secondVC.delegate = self
        self.navigationController?.pushViewController(secondVC, animated: true)
    }

    func saveData(data: String){
        dataLabel.text = data
    }

}

ViewController2.swift

 import UIKit


protocol SecondViewControllerProtocol {
    func saveData(data: String) // this function the first controllers
}

class ViewController2: UIViewController {

    var delegate: SecondViewControllerProtocol?

    @IBOutlet weak var dataTextField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func saveButtonClicked(_ sender: AnyObject) {
        delegate?.saveData(data: dataTextField.text!)
    }
}

故事板截图:

enter image description here

请检查下面的GitHub链接以测试样本:

https://github.com/k-sathireddy/PassingDataThroughSegue