2016-03-31 15 views
1

bekommst ich eine IBOutlet in einer Klasse Main_Screen habe, die in einer Klasse ist verfügbar, zu einem Hauptviewcontroller angeschlossen, die einen Scroll hat, aber wenn ich versuche, es nulleine IBOutlet von einer anderen Klasse schnellen

Code in Aussicht zu bekommen gibt Controller

import UIKit 

class ViewController: UIViewController , UIScrollViewDelegate { 

    @IBOutlet weak var scrollVieww: UIScrollView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.scrollVieww.pagingEnabled = true 
     self.scrollVieww.delegate = self 

     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     if let vc = storyboard.instantiateViewControllerWithIdentifier("MainScreen") as? Main_Screen { 
      // imageview returns nil :(
      let imageView = vc.avatarImageView 
     } 

     // Do any additional setup after loading the view, typically from a nib. 
     let V1 = self.storyboard?.instantiateViewControllerWithIdentifier("HomeScreen") as UIViewController! 
     //Add initialized view to main view and its scroll view and also set bounds 
     self.addChildViewController(V1) 
     self.scrollVieww.addSubview(V1.view) 
     V1.didMoveToParentViewController(self) 
     V1.view.frame = scrollVieww.bounds 

     //Initialize using Unique ID for the View 
     let V2 = self.storyboard?.instantiateViewControllerWithIdentifier("MainScreen") as UIViewController! 
     //Add initialized view to main view and its scroll view also set bounds 
     self.addChildViewController(V2) 
     self.scrollVieww.addSubview(V2.view) 
     V2.didMoveToParentViewController(self) 
     V2.view.frame = scrollVieww.bounds 

     //Create frame for the view and define its urigin point with respect to View 1 
     var V2Frame: CGRect = V2.view.frame 
     V2Frame.origin.x = self.view.frame.width 
     V2.view.frame = V2Frame 

     //The width is set here as we are dealing with Horizontal Scroll 
     //The Width is x3 as there are 3 sub views in all 
     self.scrollVieww.contentSize = CGSizeMake((self.view.frame.width) * 2, (self.view.frame.height)) 

} 
+0

Ich sehe nirgendwo, wo Sie irgendetwas mit 'vc' tun. Wolltest du es dem Scrollview hinzufügen? Wenn Sie später einen zweiten MainScreen zuweisen, (v2) wird es eine andere Instanz sein, so dass imageView nicht gesetzt wird und Sie nirgends auf 'main_screen' zugreifen. – Paulw11

+0

Ich möchte eine UiScrollView-Delegate-Methode aufrufen und eine imageView animieren, was ich nicht kann in der Klasse Main_Screen @ Paulw11 –

Antwort

4

Kurze Antwort: Tun Sie das nicht. Sie sollten die Ansichten eines anderen View-Controllers als privat behandeln.

Wenn Sie die Benutzeroberfläche eines anderen Ansichtscontrollers bearbeiten müssen, fügen Sie öffentliche Methoden hinzu, die Sie zum Anfordern der UI-Änderung verwenden, und lassen Sie dann Code innerhalb des VC die Änderung vornehmen.

Dies ist sowohl ein viel besseres Design, und es vermeidet Fälle, in denen die Ansichten des anderen View-Controllers noch nicht erstellt wurden, also sind sie Null und es stürzt ab/stürzt mit einer Fehlermeldung ab .

Verwandte Themen