swift 我无法实现代理模式

gtlvzcf8  于 2023-02-28  发布在  Swift
关注(0)|答案(1)|浏览(142)

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
    }
    
    
}

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

carvr3hs

carvr3hs1#

您几乎肯定不希望为此使用协议/委托模式...
一般来说,您希望在创建控制器(GameViewController)时将数据 * 传递 * 给它,然后显示它。
GameViewController中添加一个属性来 * 接收 * 数据(在本例中是一个字符串):

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,并且可以按照自己的意愿使用它。

相关问题