without - swift segue passing data




Übergeben Sie Daten zwischen ViewController und ContainerViewController (2)

Alles, was Sie tun müssen, ist, einen Verweis auf Container in Ihrem Master-View-Controller zu behalten.

Das heißt, Sie sollten dem Master eine Instanzvariable hinzufügen, die einen Verweis auf den View-Controller enthält , nicht nur auf die Ansicht. Sie müssen es in prepareForSegue .

Der Anfang des Master View Controllers würde also ungefähr so ​​aussehen:

class Master: UIViewController, ContainerToMaster {

@IBOutlet var containerView: UIView!

var containerViewController: Container?

@IBOutlet var labelMaster: UILabel!

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "containerViewSegue" {
        containerViewController = segue.destinationViewController as? Container
        containerViewController!.containerToMaster = self
    }
}

Ändern Sie dann in Ihrer Schaltflächenfunktion einfach die Beschriftung mit der soeben hinzugefügten Variablen.

Beispiel:

@IBAction func button_Container(sender: AnyObject) {
    containerViewController?.changeLabel("Nice! It's work!")
}

Das bedeutet, dass Sie auch Ihr MasterToContainer Protokoll loswerden können.

Ich habe diesen Code getestet, also weiß ich, dass es funktioniert, aber leider bin ich ein Objective-C-Entwickler und weiß nichts über Best Practices in Swift. Ich weiß also nicht, ob das der beste Weg ist, aber es funktioniert sicherlich.

Bearbeiten:

Hier ist der genaue Code, den ich getestet habe:

Master.Schwung:

import UIKit

class Master: UIViewController, ContainerToMaster {

    @IBOutlet var containerView: UIView!
    @IBOutlet var labelMaster: UILabel!
    var containerViewController: Container?

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "containerViewSegue" {
            containerViewController = segue.destinationViewController as? Container
            containerViewController!.containerToMaster = self
        }
    }

    @IBAction func button_Container(sender: AnyObject) {
        containerViewController?.changeLabel("Nice! It's work!")
    }

    func changeLabel(text: String) {
        labelMaster.text = text
    }
}

Container.swift:

import UIKit

protocol ContainerToMaster {
    func changeLabel(text:String)
}

class Container: UIViewController {

    @IBOutlet var labelContainer: UILabel!
    var containerToMaster:ContainerToMaster?

    @IBAction func button_Master(sender: AnyObject) {
        containerToMaster?.changeLabel("Amazing! It's work!")
    }

    func changeLabel(text: String) {
        labelContainer.text = text
    }
}

Ich arbeite an einer App und muss Daten zwischen Ansicht und ContainerView übergeben. Ich muss Daten senden und Daten von beiden Ansichten erhalten.

Lass mich das besser erklären:

Ich kann den Label-Master (Berühren Sie den Container-Button) nach Protokoll ändern, aber ich kann den Label-Container nicht ändern (Berühren Sie den Master-Button). Was passiert, ist, dass der Master sich mit dem Container durch eine Folge verbindet. Aber folgen Sie nicht dem Container, der mit dem Master verknüpft ist.

Ich habe versucht, hinzuzufügen, aber zu übergehen, aber es hat funktioniert.

Der Master View Controller:

import UIKit

protocol MasterToContainer {
    func changeLabel(text:String)
}

class Master: UIViewController, ContainerToMaster {

    @IBOutlet var containerView: UIView!

    var masterToContainer:MasterToContainer?

    @IBOutlet var labelMaster: UILabel!


    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "containerViewSegue" {
            let view = segue.destinationViewController as? Container
            view!.containerToMaster = self
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func button_Container(sender: AnyObject) {
        masterToContainer?.changeLabel("Nice! It's work!")
    }


    func changeLabel(text: String) {
        labelMaster.text = text
    }
}

Der Containeransicht-Controller:

import UIKit

protocol ContainerToMaster {
    func changeLabel(text:String)
}

class Container: UIViewController, MasterToContainer {

    var containerToMaster:ContainerToMaster?

    @IBOutlet var labelContainer: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    @IBAction func button_Master(sender: AnyObject) {
        containerToMaster?.changeLabel("Amazing! It's work!")
    }


    func changeLabel(text: String) {
        labelContainer.text = text
    }
}

Kann mir jemand helfen?


Ich habe es mit diesem Code gelöst

Um Daten von ViewController -> ContainerViewController zu senden

Class ViewController : UIViewController {

func sendData(MyStringToSend : String) {

let CVC = childViewControllers.last as! ContainerViewController
CVC.ChangeLabel( MyStringToSend)
}

}

in Ihrem ContainerViewController

Class ContainerViewController : UIViewController {

@IBOutlet weak var myLabel: UILabel!

func ChangeLabel(labelToChange : String){

myLabel.text = labelToChange

 }
}

Um Daten von ContainerViewController -> ViewController zu senden

Class ContainerViewController : UIViewController {

func sendDataToVc(myString : String) {

   let Vc = parentViewController as! ViewController
   Vc.dataFromContainer(myString)
 }

}

und in ViewController

  Class ViewController : UIViewController {

  func dataFromContainer(containerData : String){

   print(containerData)
  }

  }

Ich hoffe, das wird jemandem helfen.