答案 0 :(得分:1)
我认为你有ViewController类VC1(屏幕1)& ViewController类VC2(屏幕2)。我从截图中看到,您已经使用segue从VC1转到VC2视图。
现在,在VC2类中声明一个变量,我们称之为labelValue,
class VC2 {
var labelValue: String?
...
}
每当您使用storyboard segue从一个viewcontroller的视图移动到其他viewcontroller时,会看到一个名为
的方法func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
如果它在源viewController类(在你的情况下是scene1)中被覆盖,它将被调用。在此方法中,您可以访问目标视图控制器(场景2)及其属性。因此,对于您的情况,您可以像这样实现它,
class VC1 {
//I have assumed the below label will hold the value which you want to pass it to the scene 2.
var lblResult: UILabel!
......
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// You can access the VC2 instance from the segue
if let vc2 = segue.destinationViewController as? VC2 {
vc2.labelValue = lblResult.text
}
}
现在,如上所示正确实施 prepareForSegue:方法后,您就可以从scene2的scene1属性获取标签的值。
请在此处详细了解segues:More About Segues and Storyboards here.
================================
修改强>
来到您编辑的问题,在View2 viewController中,您已将labelNumber1声明为String而不是UILabel,因此每当您将值传递给labelNumber1时,该值将包含在此变量中,并且不会屏幕显示,因为它只是一个普通的字符串。所以你可以做的是,将labelNumber1声明为UILabel
class View2: UIViewController {
@IBOutlet var labelNumber1: UILabel!
.....
}
并在ViewController1中准备segue时进行以下更改,
class ViewController1: UIViewController {
.....
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// You can access the VC2 instance from the segue
if let view2 = segue.destinationViewController as? VC2 {
view2.labelNumber1.text = lblResult.text
}
}
但是,如果您仍想将labelNumber1保留为String,并验证是否已在segue期间从ViewController1传递该值,请将以下行添加到View2 ViewController的viewDidLoad()。
class View2: UIViewController {
.....
override func viewDidLoad() {
super.viewDidLoad()
print("labelNumber1: \(labelNumber1)")
}
}
您可以在控制台中看到labelNumber1的打印值。
HTH:)
答案 1 :(得分:1)
看起来你已经在ViewController1和ViewController2之间有一个segue
,所以现在你只需要将一个日期从一个传递到另一个。这可以在从ViewController1转换到ViewController2时调用的函数prepare(for segue: UIStoryboardSegue, sender: AnyObject?)
中完成。
UIStoryboardSegue
类有一个名为source
的属性UIViewController
,另一个名为destination
的属性也是UIViewController
。
所以,如果你在ViewController2上定义一个属性,就像这样:
var labelValue: String
然后你可以在ViewController1上定义的prepareForSegue
中传递一个值,如下所示:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard let viewController2 = segue.destination as? YourViewController2 else {
return
}
viewController2.labelValue = theValueFromViewController1
}
Here是教程告诉你更多(尽管在Objective C中)
this也是一个很好的介绍。
希望对你有所帮助。
答案 2 :(得分:1)
我将textFiled
数据传递给destViewController
,以显示segue在传递数据时的表现。
注意:如果您想将字符串数据传递给destVC
。您可以指定字符串var someValue: String
<强> mainStoryBoard:强>
<强> MainVC:强>
@IBOutlet weak var textField: UITextField!
//or you can assign string like var someValue: : String
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let viewController = segue.destination as! destVC
viewController.dataText = textField.text // someValue.text
}
<强> DestVC:强>
@IBOutlet var label: UILabel!
var dataText = String()
override func viewDidLoad()
label.text = dataText
}
<强>输出:强>