如何在不使用 segue 的情况下将 Label 从 viewController 传递到另一个?

How can i pass Label from viewController to another one without using segue?

提问人:power 提问时间:8/8/2020 最后编辑:power 更新时间:8/8/2020 访问量:255

问:

嗨,我是 swift 的新手,我正在尝试构建一个商店应用程序,我已经构建了它,但我只有一个问题,那就是,我想在不使用 segue 的情况下将数据(标签、图像、价格标签)传递给另一个 viewController。我尝试了所有方法(委托,通知中心,关闭),但我没有解决它。

这是我创建新项目的图片,以解释我到底想做什么。

enter image description here

我希望我能得到解决方案,因为我可能搜索了很多月,但我没有解决我的问题:(

这是我的代码

passingViewController

             import UIKit

    extension passingDataViewController : textDelegate {
        func sendText(withText: String) {
           Label.text = withText
    
       }


     }


     class receivingDataViewController: UIViewController {


       @IBOutlet var label2: UILabel!

      override func viewDidLoad() {
          super.viewDidLoad()

    
      
      }



     }

接收DataViewController

            import UIKit

       extension passingDataViewController : textDelegate {
         func sendText(withText: String) {
           Label.text = withText
    
      }


     }


     class receivingDataViewController: UIViewController {


       @IBOutlet var label2: UILabel!

       override func viewDidLoad() {
         super.viewDidLoad()

    
    
            }



         }
数组 SWIFT 委托 闭包 NSnotificationCenter

评论

0赞 Jawad Ali 8/8/2020
您需要发送 String 而不是 UILabel ...请包括您到目前为止尝试过的代码?
0赞 Russell 8/8/2020
您可能应该解释为什么您不想使用委托 - 这将很容易解决这个问题
0赞 power 8/8/2020
@Russell因为我尝试过,但它对我不起作用,或者也许我没有很好地使用它,我完全是开发新手:)此外,当我在 YouTube 上观看视频时,它只会将数据从 UITextField 传递到 UILabel,而我想要的是将 UILabel 传递给 UIlabel 。你明白了吗??
1赞 Russell 8/8/2020
@power - 你需要解决真正的问题,即你无法让代表工作,而不是找到一个晦涩难懂的解决方案。首先要记住的是,您不是在控制器之间传递文本字段或标签 - 您传递的是 DATA,然后用于填充文本字段、标签或您需要的任何内容。回到您的委托示例,然后重试 - 然后发布一个新问题,包括显示您尝试过的内容的代码。祝你好运
0赞 power 8/8/2020
@Russell好的,我会尝试一下,我会编辑我的代码,非常感谢,我希望我能解决我的问题:)

答:

0赞 Russell 8/8/2020 #1

您没有解释如何创建新控制器,但这里有一个简单的示例,仅使用选项卡控制器。这利用共享单一实例来传递委托,但如果以编程方式创建每个控制器,则可以在创建每个新实例时更新委托。

在此示例中,我创建了一个包含委托的单例

import Foundation

class SharedSingleton : NSObject
{
    var updateDelegate         : UpdateDelegate?

    static let sharedInstance = SharedSingleton()
}

然后我们定义您正在使用的协议。

在传递视图中,您可以这样定义它

protocol UpdateDelegate
{
    func updateDisplay(text : String)
}

你使用它(在像这样的传递视图中

var sharedInstance = SharedSingleton.sharedInstance

@IBAction func cmdGo(_ sender: Any) {
    sharedInstance.updateDelegate!.updateDisplay(text: txtInput.text!)
}

定义接收视图以使用更新协议

class ReceivingViewController: UIViewController, UpdateDelegate {

并设置委托

var sharedInstance = SharedSingleton.sharedInstance

override func viewDidLoad() {
    super.viewDidLoad()
    // setup the delegate through the shared instance
    sharedInstance.updateDelegate = self
}

然后实现 update 方法

func updateDisplay(text: String) {
    lblDisplay.text = text
}

就是这样。您可能需要更新实现以更改共享委托指针的方式,但这就是过程。

评论

0赞 power 8/9/2020
它没有用:(请您给我另一个例子或其他方法来解释我如何只传递标签?