在第二个视图上显示标签值 - Swift

时间:2016-11-15 13:29:06

标签: swift xcode view label

由于我是新手和Swift上的新手,有人可以告诉我如何在屏幕1上显示标签值以显示在屏幕2上。谢谢

enter image description here

编辑:所以我尝试了你告诉我的方式,但由于某种原因,标签文字没有在视图2中改变。任何帮助?感谢

enter image description here

enter image description here

3 个答案:

答案 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:

enter image description here

<强> 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                 
}

<强>输出:

enter image description here