【问题标题】:Pass label text from one view controller to another using segues only if button (checkbox) is selected仅在选择按钮(复选框)时,将标签文本从一个视图控制器从一个视图控制器传递给另一个视图
【发布时间】:2018-04-12 06:01:51
【问题描述】:

试图将标签文本从一个视图控制器传递到另一个视图控制器,但是我只希望传递所选标签中的文本。通过选中标签旁边的复选框来选择标签。我的尝试如下。我没有收到任何错误,但我没有看到第二个 VC 中的文本。它不必是标签上的文本,我只需要传递与所选复选框相对应的文本。我试过只设置一个var。这是我第一次尝试编程,所以我可能会遗漏一些非常简单的东西。简而言之,需要能够在“if”语句中执行 segue 准备。

第一个 VC

           let EnSoString = "Energy Source"
       @IBAction func EnergySourceBut(_ sender: UIButton) {

        if sender.isSelected {
            sender.isSelected = false
        } else {
            sender.isSelected = true;do {
                func prepare(for segue: UIStoryboardSegue, sender: Any){
                    let receivevc1 = segue.destination as! step4ViewController
                     receivevc1.EnergySourceLab = EnSoString
            }
        }
    }
}

第二个风投

    //name
var EnergySourceLab:String?

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
    // received info
    if  let receivedEnergySourceLab = EnergySourceLab {
        EnergySourceLab1.text = receivedEnergySourceLab}

}

Selecting checkbox Code for prepare for segue within button is.selected

【问题讨论】:

  • 你在 CheckBox 被点击时传递字符串,你只想传递一个文本还是多个?
  • Pass data through segue的可能重复
  • 我不希望在选中复选框后立即执行转场。用户需要能够选择多个框并将每个框的文本传递给下一个视图控制器。例如,如果我有 10 个复选框,每个复选框都标记为“一”、“二”、“三”......并且用户选择了一个和两个,这将显示在下一个视图控制器“一”和“二”上。跨度>

标签: ios swift if-statement segue


【解决方案1】:

试试这个:

第一个 VC

       let EnSoString = "Energy Source"

   @IBAction func EnergySourceBut(_ sender: UIButton) {

    if sender.isSelected {
        sender.isSelected = false
    } else {
             self.performSegue(withIdentifier: "segueID", sender: self) 
    }
}



override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "segueID" {
    if let vc = segue.destinationViewController as? YourSecondVC {
        vc.EnergySourceLab = EnSoString
    }
}

第二个风投

//name
var EnergySourceLab:String?

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
    // received info
    if  let receivedEnergySourceLab = EnergySourceLab {
        EnergySourceLab1.text = receivedEnergySourceLab}

}

【讨论】:

  • 感谢您的回复。如果我执行上面的代码,我不会在选中复选框后立即执行 segue 吗?我需要能够选中多个框,然后使用每个按钮(复选框)中的文本执行 segue..
【解决方案2】:

我认为下面的代码会帮助你,试试这样

第一个 VC

if sender.isSelected == true {
      sender.isSelected = false
    } else {
      sender.isSelected = true
      if segue.identifier == "yourIdentifier" {
        var vc = segue.destination as! step4ViewController
        vc.EnergySourceLab = EnSoString
      }
    }

【讨论】:

  • 您在 IBAction 中哪里可以找到 segue.identifier
  • MRizwan33 是正确的。无法使用 segue.identifier。
【解决方案3】:

好的,所以我想出了解决此问题的方法。要达到我想要的结果,这是一个漫长而复杂的方法,但它确实有效。在第一个视图控制器上,我创建了一个计数器,然后为每个复选框分配了一个 Int 值。然后我将该 Int 值传递给下一个视图控制器。然后在下一个视图控制器中,我将每个 Int 值分配给一个 String 值并将该字符串放入文本框中(如果 counter Int value = X 打印此文本,否则打印“”)。我在第一个 View Controller 上设置了多个计数器,以便用户可以选择多个复选框,并在第二个 View Controller 上引用每个计数器。如果有人有兴趣,我可以发布代码。谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    相关资源
    最近更新 更多