2017-10-29 6 views
0

Ich habe ein sehr einfaches Projekt, wo eine Ansicht (Ansicht senden) Aussehen der zweiten Ansicht ändern sollte (Empfangsansicht). Ich versuche Delegierung zu verwenden, aber ich habe ein Problem mit der Variablen "delegieren" in SendingVC zuweisen. Ich habe versucht, es in Override Func "Prepare" in ReceivingVC zu tun, aber diese Methode wird nicht aufgerufen.Swift - Delegate-Methode mit TabBar

Ich denke, dieser Code funktionieren könnte, aber ich weiß nicht, wo ich es sollte:

let sendVC : SendingVC! = tabBarController?.viewControllers![1] as! SendingVC 
sendVC.delegate = self 

ReceivingVC:

import UIKit 

class ReceivingVC: UIViewController, DataSendDelegate { 

@IBOutlet weak var Label: UILabel! 

func userDidEnterData(data: String) { 
    Label.text = data 
} 

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

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let sendVC : SendingVC! = tabBarController?.viewControllers![1] as! SendingVC 
    sendVC.delegate = self 
} 
} 

SendingVC:

import UIKit 

protocol DataSendDelegate { 
func userDidEnterData(data: String) 
} 

class SendingVC: UIViewController { 
var delegate: DataSendDelegate? = nil 

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

@IBAction func setTextButton(_ sender: UIButton) { 
    if delegate != nil { 
     delegate?.userDidEnterData(data: "some text") 
    } 
} 
} 

Storyboard img

+1

Sie sollten Ihren Code als Schnipsel anstelle von Bildern hinzufügen. –

+0

Ok, ich habe es bearbeitet – Michal

+0

Haben Sie versucht, Ihren Code in die ViewDidLoad-Methode von ReceivingVC zu setzen? – bjd23

Antwort

0

Th anks bjd23, es funktioniert perfekt. So Lösung wird es die viewDidLoad Methode setzt

Edit: Wenn Sie diesen Code haben:

if delegate != nil { 
    delegate?.userDidEnterData(data: "some text") 
} 

im viewDidLoad statt Taste Aktion, ich empfehle es, über die viewDidAppear oder viewWillAppear, denn wenn Ihre Sendeansicht zuerst geladen wird, passiert nichts

+0

Das "if" Zeug ist völlig unnötig. 'delegate?' bereits _means_ 'if delegate! = nil'. – matt

+0

ok, danke matt – Michal