2017-06-12 3 views
0

Ich studiere Delegat in Swift und ich versuche, die TextLabel in Container, die in der HauptansichtController befindet sich wie folgt zu ändern. Ändern Sie den Text im Container von der HauptansichtController

und ich schrieb 2 Codes für HauptansichtController (viewController.swift) und die andere für Container (containerViewController.swift) aber diese Codes funktionieren nicht. Wie kann ich Delegat einrichten und den Text von der Schaltfläche auf dem Haupt-ViewController ändern?

Hier sind meine 2 Codes.

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var container: UIView! 

    @IBAction func touchMe(_ sender: Any) { 

     container.labelText.text = "Hello" 

    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 

} 

und

import UIKit 

class ContainerViewController: UIViewController{ 


    @IBOutlet weak var labelText: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     ContainerViewController.delegate = self 

    } 

} 

Antwort

0

Lasst uns mehr über Logiken von Delegierten sprechen. Wie ich auf der vorherigen Frage geantwortet habe, ist es hier sinnlos, Delegierte zu verwenden. Aber, nur um zu klären. Protokoll - ist eine Reihe von Regeln zu tun. Delegierter - etwas gesendet oder autorisiert, andere zu vertreten. In Ihrem Beispiel tun Sie also ContainerViewController.delegate = self, was in vielerlei Hinsicht falsch ist. Zuallererst setzen Sie nicht den Delegaten der ganzen Klasse, sondern den Delegierten einer Instanz einer Klasse. in Ihrem Fall container.delegate = self in ViewController Klasse viewDidLoad Methode. Hier legen Sie fest, dass dieser Controller für die Methoden verantwortlich ist, die für das, was als Delegat festgelegt wird, implementiert werden sollen. Abonnieren Sie dann Ihren ViewController für das Protokoll, damit die Regeln erfüllt werden. Und der Hauptteil - legen Sie ein Protokoll fest. Es wird so etwas wie -

import UIKit 

// set your protocol and it's functions 
protocol ProtocolNameDelegate { 
    func yourMethodName(yourMethodParameters-optional) 
} 


class ViewController: UIViewController, ProtocolNameDelegate { 

     @IBOutlet weak var container: UIView! 

     @IBAction func touchMe(_ sender: Any) { 
     // call your implementation of protocol function 
     yourMethodName() 
     } 

     override func viewDidLoad() { 
      super.viewDidLoad() 
      // set delegate of container to get triggered to run implementation of it's method, when it is called from container. 
      container.delegate = self 
     } 

     // here you implement your delegate method 
     func yourMethodName() { 
      // your method implementation 
     }   
    } 

und in der zweiten Klasse -

import UIKit 

class ContainerViewController: UIViewController{ 

    @IBOutlet weak var labelText: UILabel! 
    // here you say your class has a delegate, and it is optional 
    var delegate: ProtocolNameDelegate? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 

    func methodName() { 
     // here you trigger something to be implemented where you need it, in your case in your ViewController class 
     delegate?.yourMethodName() 
    } 
} 

Wenn Sie mehr Fragen haben, öffnen Sie keine Anleitung, die Delegierten, oder Sie können mich

eine E-Mail
Verwandte Themen