Ios 将数据传回第一个viewController
我对如何处理swift协议在两个ViewController之间传递数据有基本了解。我的情况是:我想将数据传递回我的第一个viewcontroller 例如: 第一视图控制器Ios 将数据传回第一个viewController,ios,swift,Ios,Swift,我对如何处理swift协议在两个ViewController之间传递数据有基本了解。我的情况是:我想将数据传递回我的第一个viewcontroller 例如: 第一视图控制器 class ViewControllerA: UIViewController, ViewControllerCResult { func set(data: String) { } } class ViewControllerB: UIViewController { } protocol V
class ViewControllerA: UIViewController, ViewControllerCResult {
func set(data: String) {
}
}
class ViewControllerB: UIViewController {
}
protocol ViewControllerCResult {
set(data: String)
}
class ViewControllerC: UIViewController {
var delegate: ViewControllerCResult?
}
第二视图控制器
class ViewControllerA: UIViewController, ViewControllerCResult {
func set(data: String) {
}
}
class ViewControllerB: UIViewController {
}
protocol ViewControllerCResult {
set(data: String)
}
class ViewControllerC: UIViewController {
var delegate: ViewControllerCResult?
}
第三视图控制器
class ViewControllerA: UIViewController, ViewControllerCResult {
func set(data: String) {
}
}
class ViewControllerB: UIViewController {
}
protocol ViewControllerCResult {
set(data: String)
}
class ViewControllerC: UIViewController {
var delegate: ViewControllerCResult?
}
ViewControllerA->ViewControllerB->ViewControllerC
我想将数据从ViewControllerC传递到ViewControllerA。
有人能帮我吗?你可以从控制器A->B->C传递
委托
,当调用popViewcontroller时,你可以检查ViewController C中的自.委托
,如果它存在,只需调用像这样的自.委托?.set(“数据自C”)
。检查
ViewController3中的popControllerPressed函数
第一视图控制器
class ViewController2: UIViewController, ViewControllerCResult {
var delegate: ViewControllerCResult?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func pushControllerPressed(_ sender: Any) {
if let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController3") as? ViewController3 {
if let navigator = navigationController {
viewController.delegate = self.delegate
navigator.pushViewController(viewController, animated: true)
}
}
}
func set(data: String) {
print(data)
}
}
protocol ViewControllerCResult {
func set(data: String)
}
类ViewController:UIViewController、ViewControllerResult{
var delegate: ViewControllerCResult?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func pushControllerPressed(_ sender: Any) {
if let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController2") as? ViewController2 {
if let navigator = navigationController {
viewController.delegate = self
navigator.pushViewController(viewController, animated: true)
}
}
}
func set(data: String) {
}
}
var delegate: ViewControllerCResult?
func set(data: String) {
print(data)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func popControllerPressed(_ sender: Any) {
for controller in self.navigationController!.viewControllers as Array {
if controller.isKind(of: ViewController.self) {
delegate?.set(data: "data from C")
self.navigationController!.popToViewController(controller, animated: true)
break
}
}
}
}
第二视图控制器
class ViewController2: UIViewController, ViewControllerCResult {
var delegate: ViewControllerCResult?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func pushControllerPressed(_ sender: Any) {
if let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController3") as? ViewController3 {
if let navigator = navigationController {
viewController.delegate = self.delegate
navigator.pushViewController(viewController, animated: true)
}
}
}
func set(data: String) {
print(data)
}
}
protocol ViewControllerCResult {
func set(data: String)
}
第三视图控制器
class ViewController2: UIViewController, ViewControllerCResult {
var delegate: ViewControllerCResult?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func pushControllerPressed(_ sender: Any) {
if let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController3") as? ViewController3 {
if let navigator = navigationController {
viewController.delegate = self.delegate
navigator.pushViewController(viewController, animated: true)
}
}
}
func set(data: String) {
print(data)
}
}
protocol ViewControllerCResult {
func set(data: String)
}
类ViewController3:UIViewController、ViewControllerResult{
var delegate: ViewControllerCResult?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func pushControllerPressed(_ sender: Any) {
if let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ViewController2") as? ViewController2 {
if let navigator = navigationController {
viewController.delegate = self
navigator.pushViewController(viewController, animated: true)
}
}
}
func set(data: String) {
}
}
var delegate: ViewControllerCResult?
func set(data: String) {
print(data)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func popControllerPressed(_ sender: Any) {
for controller in self.navigationController!.viewControllers as Array {
if controller.isKind(of: ViewController.self) {
delegate?.set(data: "data from C")
self.navigationController!.popToViewController(controller, animated: true)
break
}
}
}
}
这里是代码链接:它们是链接的吗?例如,B是a的孩子,C是B的孩子吗?你是如何实例化你的ViewController的?你能写下为什么你需要将数据传递给第一个控制器吗?a&C永远不应该通信。这违反了德米特定律。如果C和B是a的孩子,可能会更好,即使这意味着B要求a显示C.这反映了A是主控制器,B和C是主控制器的子控制器的想法。然后它只是将数据传递给父控制器。我知道如何在HackSaw上实现它。它成功了。我创建了一个函数来接收值直接通过,因为B和C是A的孩子。