值未在viewControllers之间传递

时间:2019-02-17 22:03:50

标签: swift xcode uiviewcontroller

努力让我的viewControllers将值从主viewController发送到第二个。我希望它在单击按钮时发生,我将从按钮中获取值并将其传递给新表单。但这是行不通的。

主要ViewController的代码

binding.setLifecycleOwner(parent.context as MainActivity)

第二个名为TimesTablesViewController的viewController的代码:

class ViewController: UIViewController {
override func viewDidLoad() {
    super.viewDidLoad()
}

@IBAction func butClick(_ sender: UIButton) {
    NSLog("Button Pressed : %@",[sender .currentTitle])
    //var tt = [sender .currentTitle]
    // Create the view controller
    let vc = TimesTablesViewController(nibName: "TimesTablesViewController", bundle: nil)
    vc.passedValue = "xx"
    self.performSegue(withIdentifier: "pushSegue", sender: nil)

}
}

我已按照教程学习,但似乎无法解决问题!感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

替换

self.performSegue(withIdentifier: "pushSegue", sender: nil)

使用

self.present(vc,animated:true,completion:nil)

或(如果当前的vc在导航中)

self.navigationController?.pushViewController(vc,animated:true)

使用

self.performSegue(withIdentifier: "pushSegue", sender: nil)

适用于情节提要,而不适用于xibs,如果您的情况如此,那么您只需要在按钮动作中使用上面的行,并在源vc中实现此方法即可

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "pushSegue"  {
        if let nextViewController = segue.destination as? TimesTablesViewController{
                nextViewController.passedValue = "xx"  
        }
    }
}

答案 1 :(得分:2)

我假设正在显示新的视图控制器,但您只是看不到数据。如果是这样,显然您正在使用情节提要。 TimesTablesViewController(nibName:bundle:)仅在您使用XIB / NIB并手动显示新的视图控制器时有效。

如果您确实在使用情节提要,请简化您的butClick方法:

@IBAction func butClick(_ sender: UIButton) {
    NSLog("Button Pressed")
    performSegue(withIdentifier: "pushSegue", sender: self)
}

但是实施prepare(for:sender:)

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let destination = segue.destination as? TimesTablesViewController {
        destination.passedValue = "xx"
    }
}

假设以上内容解决了您的问题,建议您进一步简化一下。值得注意的是,如果您的butClick(_:)方法实际上仅调用了performSegue,则可以根本不用任何@IBAction方法来选择下一个场景:

  • 完全删除butClick(_:)
  • 在右侧面板的“连接检查器”选项卡上,删除按钮与IB中的butClick方法之间的连接;和
  • control -从先前与butClick(_:)挂钩的按钮中拖动到TimesTablesViewController的场景。

这将进一步简化您的代码。