Delegato in Swift-lingua

Ho due controller e ho bisogno di richiamare la funzione il primo controller a seconda del controller:
In secondo controller, ho creato il protocollo e init delegato in classe:

    protocol testProtocol {
        func testDelegate() //this function the first controllers
    }

    class SecondViewController: UIViewController {
        var delegate: testProtocol?
    ....
    }
    @IBAction func testDelegateClicked(sender : AnyObject) {
            delegate?.testDelegate()
        }

Primo Controller

 classe ViewController: UIViewController, testProtocol {

var secondController: SecondViewController = SecondViewController() override func viewDidLoad() { super.viewDidLoad() secondController.delegate = self } func testDelegate() { println("Hello delegate") }</pre>

Ma la funzione non è sempre chiamato

  • Come stai visualizzando secondViewController?
  • nel secondo controller solo le funzioni standard (ViewDidLoad e didReceiveMemoryWarning) e pulsante gestore mi ha mostrato
  • Assicuratevi inoltre di avere un debole riferimento al delegato. Proprietà in swift sono forti per impostazione predefinita
InformationsquelleAutor Lola | 2014-06-05



One Reply
  1. 12

    Sto andando a fare un’ipotesi che si sta utilizzando storyboard. Se sono corrette, allora il tuo problema è che il tuo secondController, creato nel tuo Primo Controller, non è reale quello che si sta presentando. È necessario impostare secondController nel prepareForSegue:

    Secondo Controller

    Invariato

    Primo Controller

    class ViewController: UIViewController, testProtocol {
    
        //you will want to add the ? since this variable is now optional (i.e. can be nil)
        var secondController: SecondViewController? //don't assign it a value yet
    
        //...
    
        //implementation of the protocol
        func testDelegate() {
            println("Hello delegate")
        }
    
        //your prepare for segue
        override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
            //get the controller that storyboard has instantiated and set it's delegate
            secondController = segue!.destinationViewController as? SecondViewController
            secondController!.delegate = self;
        }
    }
    • ma io uso secondController = segue!.destinationViewController come SecondViewController secondController.delegato = self;
    • date un’occhiata al mio commento aggiunto. Si desidera aggiungere il ? per il secondController variabile. Se si fare questo è necessario di avere anche la as?
    • Se non uso storyboard Come si può Implementare @Firo
    • vuoi creare il tuo nuovo controller di visualizzazione (var controller = SecondController()), set delegato (controller.delegate = self), poi, infine, presente che (self.navigationController.pushViewController(controller))… se hai ancora problemi fammi sapere!

Lascia un commento