英文:
I can't realise delegate pattern
问题
I can provide a translation of the provided code without the code parts:
在SWIFT中的初学者
我有2个视图控制器(ViewController),并希望在第二个视图控制器(secondVC)中显示我在第一个视图控制器(firstVC)中输入的内容。我查看了一些类似的主题,但没有找到相关内容,似乎与Storyboard有些相似,但我不懂Storyboard。
我的第一个视图控制器(firstVC):
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)
}
}
我的第二个视图控制器(secondVC):
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
}
}
我没有找到类似的内容,求帮助!
英文:
Beginner in SWIFT
I have 2 ViewController and want to show in secondVC(some Label) what I wrote in firstVC(some textfield) I checked similar topics but found nothing, there is something similar with storyboard, but I don't know storyboard.
my firstVC:
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)
}
}
my secondVC:
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
}
}
I didn't find anything similar, pls help!
答案1
得分: 0
你几乎肯定不想为此使用协议/代理模式...
一般来说,当你创建你的控制器(GameViewController
)时,你希望传递数据,然后再呈现它。
在你的GameViewController
中添加一个属性来接收数据(在这种情况下是一个字符串):
class GameViewController: UIViewController {
var gameWord: String = ""
// 你的其余代码
}
然后,在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
// 在这里“传递”数据
vc.gameWord = theWord
self.present(vc, animated: true)
}
现在,你已经将在wordTf
中输入的文本设置为你的游戏视图控制器中的gameWord
,你可以按照你的需要使用它。
英文:
You almost certainly do NOT want to use protocol/delegate pattern for this...
In general, you want to pass data to your presented controller (your GameViewController
) when you create it, and then present it.
Add a property to your GameViewController
to receive the data (a string, in this case):
class GameViewController: UIViewController {
var gameWord: String = ""
// all the rest of your code
}
Then, when you tap a button in MainViewController
to call 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)
}
You now have the text entered into wordTf
set as gameWord
in your game view controller, and you can use it however you want.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论