swift délégué entre deux-vue-contrôleur sans segue
Mon délégué protocole ne s'est jamais appelé
Mon premier contrôleur - ViewController
class ViewController: UIViewController,testProtocol {
@IBAction func btInit(sender: AnyObject) {
println("Bt Init")
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let initViewController: UIViewController = storyBoard.instantiateViewControllerWithIdentifier("viewTarget") as targetViewController
self.presentViewController(initViewController,animated: false, nil)
}
var targetController = targetViewController();
override func viewDidLoad() {
super.viewDidLoad()
self.targetController.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
//Dispose of any resources that can be recreated.
}
func testDelegate(){
println(" in my view controller delegate ")
}
}
Dans mon second point de vue, contrôleur targetViewController
protocol testProtocol {
func testDelegate() //this function the first controllers
}
class targetViewController: UIViewController {
@IBAction func BtTarget(sender: AnyObject) {
println("bt target pressed")
delegate?.testDelegate()
}
var delegate : testProtocol?
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func testDelegate(){
println(" in my target view controller delegate ")
}
}
Pourquoi est testDelegate() ne s'est jamais appelé sur ViewController? Ce que je fais mal? Merci.
J'ai lu beaucoup de posts sur ce sujet, mais tous les exemples sont donnés avec des enchaînements de transition, et je ne veux pas utiliser un segue.
Vous devez vous connecter pour publier un commentaire.
En général, vous définissez un nouveau point de vue du contrôleur délégué à la propriété dans
prepareForSegue:
. Vous avez dit que vous n'êtes pas à l'aide d'une séquence, de sorte que vous aurez besoin d'instancier le second point de vue du contrôleur et de les présenter d'une certaine manière. Vous pouvez le faire en faisant quelque chose comme:Vous avez un
testDelegate()
méthode dans les deux vue des contrôleurs, mais vous voulez seulement dans la première vue-contrôleur. Ensuite, votre seconde vue-contrôleur peut appelerdelegate?.testDelegate()
au moment opportun.Enfin, vous souhaitez généralement de prendre délégué propriétés de faible, donc je vous conseille de changer
var delegate : testProtocol?
àweak var delegate: testProtocol?
Je voudrais lire sur la délégation. Ici est relativement simple en 5 étapes de la procédure de délégation qui peuvent vous aider à:
Délégation en 5 Étapes:
l'objet A est le délégué de l'objet B, et l'objet B se chargera d'envoyer les messages: