2016-07-30 41 views
0

Ich habe einen 'performSegueWithIdentifier' eingerichtet, um von einer Schaltfläche aus aufgerufen zu werden. Eine URL für ein Video befindet sich in der Zeichenfolge 'self.specimen.filmMovieLink'. Wie gebe ich dieses Feld an den AVController weiter? Ich habe einen Abschnitt namens "newMovie" eingerichtet und die AV View Controller-Szene zum Storyboard hinzugefügt (ohne Code oder angehängte Datei zur Steuerung dieser Szene).Wie über die Schaltfläche 'performSegueWithIdentifier' das Videofeld an den AVPlayer-Controller übergeben wird, mit swift 2.2

Ich brauche es von performSegueWithIdentifier bis senden („NewMovie“, Absender: specimenAnnotation)

Wenn ich die URL und eine direkte Zeichenfolge mit einer Arbeits URL hinzufügen den AVPlayer-Controller öffnet, aber das Video nicht spielen, als ich versuchte, diesen Code:
performSegueWithIdentifier ("Watchmovie", Absender: specimenAnnotation) let url = NSURL (string: "https://www.example.com/video.mp4")

Dieser Code funktioniert die Video-URL zum AVController mit meinen Feldern segue aus ein anderer View-Controller, der stattdessen 'preparedForSegue' verwendet:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     let destination = segue.destinationViewController as! 
     AVPlayerViewController 
     let url = NSURL(string: self.specimen.filmMovieLink) 
     destination.player = AVPlayer(URL: url!) 

    } 
} 

Ich habe versucht, es für die 'performSegueWithIdentifier' anzupassen, bin aber ein Anfänger und konnte es nicht zur Arbeit bekommen. Wie kann ich diesen Code (oder welchen neuen Code brauche ich) anpassen, um mein Feld (self.specimen.filmMovieLink) an den AV-Controller mit dem 'performSegueWithIdentifier' anstelle von 'prepareForSegue' zu übergeben?

Antwort

1

So wie ich es nähern würde, würde ich eine Eigenschaft Observer erstellen:

// create a property observer that is set to nil then would change until something was assigned it to 
var myURL:URL? = nil { 
    willSet(newValue) { 
     print("newvalue \(newValue)") 
    } 
    didSet{ 
    // could do more stuff if needed it 
    } 
} 

Entweder in Ihrem ViewDidLoad oder innerhalb Ihrer UIButton Aktionsmethode könnte Ihr diese Zeile unter

 myURL = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4") 

dann rufen

@IBAction func MyButton(sender:UIButton) { 
     performSegue(withIdentifier: "segueIdentifier", sender: nil) 
} 

override func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) { 
    let destination = segue.destinationViewController as! AVPlayerViewController 
    guard let _url = myURL else {return } 
    destination.player = AVPlayer(url: _url) 
    destination.player?.play() 
} 

Voila, wenn Sie TableView verwenden möchten, könnten Sieüberprüfenmy github project

+0

danke Lamar, ich werde das versuchen. Meines ist kein UIButton, aber ich nehme an, es sollte immer noch funktionieren, da es ein Callout ist, das wie ein Knopf angetippt wird. Der Code: func mapView (mapView: MKMapView, annotationView: MKAnnotationView, calloutAccessoryControlTapped Steuerelement: UIControl) { wenn last sampleAnnotation = annotationView.annotation als? SpecimenAnnotation {und dann 'performSegue' wie oben. Ich bin nur ein wenig unsicher, wo genau ich den vorgeschlagenen Code hinzufüge? –

+0

Ich dachte, ich habe gesehen, dass du 'UIButton' benutzt oh lol probier es lass mich wissen, wie es geht] – Lamar

+0

PS danke für deinen Tipp über dein Github-Projekt - definitiv wird das großartig in mein Projekt integrieren. –