如何在没有 segue 和 storyboard 编程的情况下传递数据?
Posted
技术标签:
【中文标题】如何在没有 segue 和 storyboard 编程的情况下传递数据?【英文标题】:How to pass data without segue and storyboard programming? 【发布时间】:2017-02-22 09:12:46 【问题描述】:我想将数据从 vc1 传递到 vc2。
vc1 有很多按钮。 vc2 有许多元素,并检测用户按下显示不同元素的按钮。 所以,我只写了两个 .swift 文件来改变不同的 UI。
vc1:
let vc2 = vc2()
func buttonClick(sender:UIButton)
switch sender
case button1:
vc2.data = "name"
present(vc2, animated: true, completion: nil)
break
case button2:
vc2.data = "photo"
present(vc2, animated: true, completion: nil)
break
default:
print("default")
vc2:
var data:NSString = ""
override func viewDidLoad()
super.viewDidLoad()
print("data is here : \(data)")
switch data
case "name":
print("here is button1View")
break
case "photo":
print("here is button2View")
break
default:
print("default View")
打印数据为空。 我应该如何处理这个想法?
【问题讨论】:
又是什么问题?什么不工作? var data:NSString = "",这个不对,写成var data:NSString?在当前场景中,您正在初始化数据变量 我知道。如何传递数据? 将你的代码从viewDidLoad
移动到viewWillAppear
你为什么不简单地为VC2添加一个初始方法并将数据作为参数传递。例如init(data: NSData?)
【参考方案1】:
这个问题看起来你没有初始化 vc2,所以我给你写了一个例子,它对我有用
@IBOutlet weak var button1: UIButton!
@IBOutlet weak var button2: UIButton!
override func viewDidLoad()
super.viewDidLoad()
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
@IBAction func buttonClick(_ sender: UIButton)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc2 = storyboard.instantiateViewController(withIdentifier :"vc2") as! vc2
switch sender
case button1:
vc2.data = "name"
present(vc2, animated: true, completion: nil)
break
case button2:
vc2.data = "photo"
present(vc2, animated: true, completion: nil)
break
default:
print("default")
和vc2
var data:NSString = ""
override func viewDidLoad()
super.viewDidLoad()
print("data is here : \(data)")
switch data
case "name":
print("here is button1View")
break
case "photo":
print("here is button2View")
break
default:
print("default View")
【讨论】:
【参考方案2】:在 vc1 中试试这个
let vc2 = UIStoryboard(name: "storeyBoardID", bundle: nil).instantiateViewController(withIdentifier: "stroyboardIdOfcontroller") as? viewController2
和
vc2.data = "name"
和vc2这样声明数据变量
var data:NSString?
希望对你有帮助
【讨论】:
以上是关于如何在没有 segue 和 storyboard 编程的情况下传递数据?的主要内容,如果未能解决你的问题,请参考以下文章
启动屏幕可能没有触发 segue。 (LaunchScreen.storyboard)
没有 Storyboard 或 XIB 的 UIViewControllers 之间的 Segue
IOS/Objective-C:在没有 Storyboard Segue 的情况下可以在模态转换中使用自定义 Segue?
使用没有 Storyboard Segues 的 UIViewControllerAnimatedTransitioning