努力让我的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)
}
}
我已按照教程学习,但似乎无法解决问题!感谢您的帮助!
答案 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(_:)
; butClick
方法之间的连接;和butClick(_:)
挂钩的按钮中拖动到TimesTablesViewController
的场景。这将进一步简化您的代码。