提问人:power 提问时间:8/8/2020 最后编辑:power 更新时间:8/8/2020 访问量:255
如何在不使用 segue 的情况下将 Label 从 viewController 传递到另一个?
How can i pass Label from viewController to another one without using segue?
问:
嗨,我是 swift 的新手,我正在尝试构建一个商店应用程序,我已经构建了它,但我只有一个问题,那就是,我想在不使用 segue 的情况下将数据(标签、图像、价格标签)传递给另一个 viewController。我尝试了所有方法(委托,通知中心,关闭),但我没有解决它。
这是我创建新项目的图片,以解释我到底想做什么。
我希望我能得到解决方案,因为我可能搜索了很多月,但我没有解决我的问题:(
这是我的代码
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()
}
}
答:
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
它没有用:(请您给我另一个例子或其他方法来解释我如何只传递标签?
评论