我无法实现委托模式

问题描述 投票:0回答:1
SWIFT 初学者

我有 2 个 ViewController,想在 secondVC(一些标签)中显示我在 firstVC(一些文本字段)中写的内容

我的第一个VC:

protocol DataDelegate { func getWord(word:String) } class MainViewController: UIViewController { let mainView = MainView() var delegate: DataDelegate? override func viewDidLoad() { super.viewDidLoad() self.view = mainView addTargets() } func addTargets() { mainView.startButton.addTarget(self, action: #selector(startGame), for: .touchUpInside) } @objc func startGame() { guard mainView.wordTf.text!.count > 7 else { print("Slishkom korotkoe slovo") return } let vc = GameViewController() vc.modalPresentationStyle = .fullScreen delegate?.getWord(word: mainView.wordTf.text!) self.present(vc, animated: true) } }

我的第二个VC:

class GameViewController: UIViewController { let gameView = GameView() override func viewDidLoad() { super.viewDidLoad() self.view = gameView addTargets() } func addTargets() { gameView.backButton.addTarget(self, action: #selector(dismissSelf), for: .touchUpInside) } @objc func dismissSelf() { self.dismiss(animated: true) } } extension GameViewController: DataDelegate { func getWord(word: String) { gameView.bigWord.text = word } }

我没有找到类似的东西,请帮忙!

ios swift uikit delegates
1个回答
0
投票

一般来说,你想在创建它时

传递数据

给你呈现的控制器(你的GameViewController),然后呈现它。

向您的

GameViewController

添加属性以

receive
数据(在本例中为字符串): class GameViewController: UIViewController { var gameWord: String = "" // all the rest of your code }

然后,当您点击
MainViewController

中的按钮来调用

startGame()
@objc func startGame() {
    
    guard theWord = mainView.wordTf.text, theWord.count > 7 else {
        print("Slishkom korotkoe slovo")
        return
    }
    
    let vc = GameViewController()
    vc.modalPresentationStyle = .fullScreen

    // "pass" the data here
    vc.gameWord = theWord

    self.present(vc, animated: true)
}

您现在已经在游戏视图控制器中将
wordTf

中输入的文本设置为

gameWord
,您可以随意使用它。
    

© www.soinside.com 2019 - 2024. All rights reserved.