按下按钮时准备不发送信息

时间:2017-09-03 15:54:34

标签: ios swift segue

我正在学习如何在按下按钮时在控制器之间传递数据,所以我正在按照这个答案:Pass data through segue,但我无法使它工作,我有3个按钮,我想要知道按下了哪个按钮,所以我在HomeView中的代码是:

   var buttonPressed: String?

    @IBAction func newsTapped(_ sender: Any) {

        buttonPressed = "news"
        self.performSegue(withIdentifier: "showNext", sender: buttonPressed)
    }


    @IBAction func tipsTapped(_ sender: Any) {
        buttonPressed = "tips"
        self.performSegue(withIdentifier: "showNext", sender: buttonPressed)
    }


    @IBAction func otherTapped(_ sender: Any) {
        buttonPressed = "other"
        self.performSegue(withIdentifier: "showNext", sender: buttonPressed)
    }


    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let data = buttonPressed
        if let destinationViewController = segue.destination as? TableViewController {
                destinationViewController.origin = data
        }

destinationView(TableViewController)中的代码是:

    var origin: String?

    override func viewDidLoad() {
     if let dataRecived = origin
     switch dataRecived {


                case "news":

                    print("News")

                case "tips":

                    print("Tips")

                case "other":
                    print("Other") 
    }

}

当我单击任何按钮时,它会将我带到TableViewController,但不会打印任何内容,我添加了If let,因为它在语句为if let dataRecived = origin时崩溃了,现在它永远不会进入if let语句。如果我显示变量的内容(鼠标悬停在xCode中的变量),则会显示:""

为什么它不起作用的任何想法?不确定它是否有事可做,但HomeView是一个ViewController,链接到一个带有TableView的导航控制器(这是一个destinationView。感谢您的帮助

2 个答案:

答案 0 :(得分:1)

看起来你的行为不正确,因为你正在viewDidLoad函数中运行switch语句,该语句在前一个视图控制器的数据被发送之前发生。

尝试向didSet属性添加origin方法以加载如下页面:

class tableVC {
  var origin: String? {
     didSet {
         if let dataRecived = origin
           switch dataRecived {
            case "news":
                print("News")
            case "tips":
                print("Tips")
            case "other":
                print("Other") 
          }
      }
  }

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

或者您可以在viewWillAppear方法

中运行切换

答案 1 :(得分:0)

我认为你遇到的问题是:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let data = buttonPressed
        if let destinationViewController = segue.destination as? TableViewController {
                destinationViewController.origin = data
        }

如果您已经为UITableViewCotroller创建了子类,则必须将目标View Controller强制转换为该类

`destinationViewController为? myCustomTableViewController:

if let destinationViewController = segue.destination as? myCustomTableViewController {
                destinationViewController.origin = data
        }