我遇到了在ViewControllers之间传递数据作为操作的问题。这意味着:
ViewController1 - NavigationControllers, etc. - ... | | ViewController2 - - - - - - ...
所以我有两个ViewControllers。 ViewController1有一个变量(让我们说var myName:String =“Joana”) 我想通过单击ViewController2中的按钮来更改它。 我的问题是:我怎么能这样做(我知道如何在通过segue直接连接但不与动作结合的VC之间传递数据,这是我的问题)? 我听说过准备(对于segue:UIStoryboardSegue,发送者:Any?),但我认为只有在两个VC之间存在segue(直接)时它才有效。 总结:
VC2: Button: action -> change var 'myname' on VC1 to 'hello', no direct segue.
提前感谢您的帮助! : - )
答案 0 :(得分:0)
看看它:
class FirstVC: UIViewController {
var someAttribute: String = "ola!"
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard let segueIdentifier = segue.identifier else { return }
if segueIdentifier == "YourSegueIdentifierFromStoryBoard" {
guard let viewController = segue.destination as? SecondVC else { return }
// someAttribute == "ola!"
viewController.someButtonTappedHandler = { [weak self] (newValue) in
guard let strongSelf = self else { return }
strongSelf.someAttribute = newValue
// someAttribute == "Bla Bla Bla!"
}
}
}
}
class SecondVC: UIViewController {
var someButtonTappedHandler: ((String) -> Void)?
@IBAction func someButtonTapped() {
if let handler = someButtonTappedHandler {
handler("Bla Bla Bla!")
}
}
}
答案 1 :(得分:0)
我现在解决了我的问题如下:
final class Singleton{
private init(){ }
static let shared = Singleton()
var someInt: Int = Int()
}
所以我宣布一个单身人士。 下一步:
class ViewControllerOne: UIViewController{
[Outlets,...]
override func viewDidLoad() {
super.viewDidLoad()
let integer = Singleton.shared.someInt
print("We're in Class: ViewController and Singleton.shared.someInt = \(integer).\n")
Singleton.shared.someInt = integer
myLabel.text = "\(Singleton.shared.someInt)"
}
}
第二个VC:
class ViewControllerTwo: UIViewController{
[...]
override func viewDidLoad() {
super.viewDidLoad()
let integer = Singleton.shared.someInt
print("We're in Class: SecondVC and Singleton.shared.someInt = \(integer).\n")
Singleton.shared.someInt = 5
if Singleton.shared.someInt == 5{
print("Singleton.shared.someInt changed to 5 in Class SecondVC.\n")
}
}
}
我的故事板看起来像这样:
让我知道是否有任何错误,但它对我有用。
我也找到帮助的另一个链接: