【问题标题】:Show Label Value on 2nd View - Swift在第二个视图上显示标签值 - Swift
【发布时间】:2016-11-15 13:29:06
【问题描述】:

由于我是新来的 Swift 新手,谁能告诉我如何让屏幕 1 上的标签值显示在屏幕 2 上。谢谢

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

【问题讨论】:

标签: swift xcode view label


【解决方案1】:

我将textFiled 数据传递给destViewController 以展示segue 在传递数据时的表现。

注意:如果您想将字符串数据传递给您的destVC。您可以分配您的字符串,例如var someValue: String

主线故事板:

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
  }

目标VC:

@IBOutlet var label: UILabel!

var dataText = String()
override func viewDidLoad()      
label.text = dataText                 
}

输出:

【讨论】:

    【解决方案2】:

    您似乎已经在 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也是很好的介绍。

    希望对你有所帮助。

    【讨论】:

    • 好的。你快到了。现在您已将值从 ViewController1 传递到 ViewController2,但您仍需要在 UI 上显示它。因此,例如在 viewWillAppear 中,您可以将 Number1V2.text 的值设置为 labelNumber1
    • 嘿,不确定您是否也可以帮我解决这个问题。谢谢stackoverflow.com/questions/40618827/…
    【解决方案3】:

    我认为您有 ViewController 类 VC1(屏幕 1)和 ViewController 类 VC2(屏幕 2)。我从屏幕截图中看到,您已经在使用 segue 从 VC1 视图转到 VC2 视图。

    现在,在你的 VC2 类中声明一个变量,我们称之为 labelValue,

    class VC2 {
    
      var labelValue: String?
    
    ...
    
    }
    

    每当您使用故事板转场从一个视图控制器的视图移动到另一个视图控制器的视图时,都会使用一个名为的方法,

    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: 方法,您就可以从场景 1 中获取标签的值到场景 2 的 labelValue 属性。

    在这里了解更多关于 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 :)

    【讨论】:

    • 不错的答案 :) 我们甚至设法链接到同一个 Ray Wenderlich 教程
    • 谢谢。是的,我们确实链接到同一个教程:)
    猜你喜欢
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    • 1970-01-01
    相关资源
    最近更新 更多