2017-01-14 5 views
0

Ich sende Daten über eine Delegate-Methode an einen View-Controller. Im View-Controller, der die Daten, wenn ich print(self) in viewDidLoad erhält bekomme ich diesen Wert:Delegieren Erstellen einer neuen Instanz von ViewController

<PageViewControllerImage: 0x7fba16d0dc40> 

und wenn ich print(self) in der Delegatfunktion ich diesen Wert zu erhalten:

<PageViewControllerImage: 0x7fba16e0eab0> 

Ich glaube, das ist, wie Ich definiere den Delegaten, es erstellt eine neue Instanz des PageViewControllerImage, aber ich kann nicht herausfinden, wie man die vorhandene Referenz darauf bekommt?

Dies ist, was ich bin mit dem Delegierten innerhalb der Klasse zu setzen, der die Daten sendet:

self.indexDelegate = PageViewControllerImage() 

------ -------- EDIT

ich versuche, Daten von meiner PageViewController Klasse zu senden:

var indexDelegate: GetMyIndexDelegate? 



func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) { 
    if (completed && finished) { 
     if let currentVC = pageViewController.viewControllers?.last { 
      let index = vcArr.index(of: currentVC) 

      if index == 3 { 

       // call the delegate function in delegate class 
       indexDelegate?.getIndex(index: index!) 

      } 
     } 
    } 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // just been trying to define instance first 
    let storyboard: UIStoryboard = UIStoryboard (name: "Main", bundle: nil) 
    let PageViewControllerImageInstance: PageViewControllerImage = storyboard.instantiateViewController(withIdentifier: "vc4") as! PageViewControllerImage 
    print("Defined Instance \(PageViewControllerImageInstance)") 
    self.indexDelegate = PageViewControllerImageInstance 

Und dann empfängt die Daten innerhalb der Klasse PageViewControllerImage:

protocol GetMyIndexDelegate { 
    func getIndex(index: Int) 
} 

import UIKit 

class PageViewControllerImage: UIViewController, GetMyIndexDelegate { 

//delegate functionto get index 
func getIndex(index: Int) { 
    if index == 3 { 
     print("Inside delegate: \(self)") 

    } 
} 

@IBOutlet var signupImage: UIImageView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    print("viewDidLoad: \(self)") 

    // Do any additional setup after loading the view. 
} 

Auch mit der Instanz der Viewcontroller definieren, bevor die Delegierten seine noch Rückkehr eine andere Instanz Nummerneinstellung:

Defined Instance <ParseStarterProject_Swift.PageViewControllerImage: 0x7fb365f06260> 

viewDidLoad: <ParseStarterProject_Swift.PageViewControllerImage: 0x7fb365d0c940> 

Inside delegate: <ParseStarterProject_Swift.PageViewControllerImage: 0x7fb365f06260> 
+0

Sie legen nur den Delegaten auf eine neue Instanz von 'PageViewControllerImage', aber Sie sollten auf eine vorhandene Instanz festlegen. Wo setzt du den Delegierten? Wie ist die Beziehung zwischen "PageViewControllerImage" und dem View-Controller, der als Delegat fungiert? – beyowulf

+0

Ich setze die Referenz in viewDidLoad. PageViewControllerImage ist eine VC, die Teil des PageViewController (Index 3) – DuckMan

+0

'viewDidLoad' von' PageViewControllerImage' ist? Vielleicht könnten Sie Ihrer Frage eine größere Vision von dem hinzufügen, was Sie erreichen möchten. Sie versuchen, Daten von wo zu wo zu übergeben? – beyowulf

Antwort

0

Delegierten werden extern generell eingestellt und sollte optional sein.

Ich gehe davon aus, dass die indexDelegate eine Eigenschaft auf ViewController ist. Sie sollten den Delegaten festlegen, wenn Sie zur Instanz PageViewControllerImage übergehen.

Dies kann auf verschiedene Arten erreicht werden, je nachdem, wie Sie zum PageViewControllerImage Controller wechseln.

Wenn Sie ein Storyboard-Segment eingerichtet haben, können Sie den Delegaten unter prepareForSegue festlegen. Zum Beispiel:

Oder, wenn Sie manuell auf den neuen Controller übergehen, können Sie den Delegaten auf diese Instanz festlegen.

+0

Ich habe die Frage geändert, um meinen Versuch zu zeigen. Es erstellt immer noch eine andere Instanz als seine Referenz in viewDidLoad – DuckMan

0

wurde instanziiert viewControllerAfter innerhalb der Klasse Pagecontroller

hace den Delegierten zu der richtigen Instanz des pageViewController zu definieren.

self.indexDelegate = selbst.childViewControllers [2] as! PageViewControllerImage

Verwandte Themen