2016-05-01 2 views
1

У меня есть класс VideoTableController, в котором есть табличное представление с кучей видео в YouTube.Быстрое получение WebView для загрузки быстрее

Когда выбрано видео, он запускает другой контроллер вида, в котором есть веб-представление, в котором будет воспроизводиться указанное видео YouTube.

Я попытался поместить код для загрузки видео в функцию prepareForSegue видеоконтроллера, но дело в том, что контроллер VideoPlayer еще не был создан, поэтому я не могу изменить значение video_view: UIWebView в функцию prepareForSegue.

Мне было интересно, если я сделаю этот видеопроигрыватель(), чтобы создать его в функции prepareForSegue, а затем изменить значение VideoPlayer.video_view.loadHTMLString(), которое будет работать или когда видеопользователь будет удален, будет экземпляр другого экземпляра ?

Вот что я в настоящее время в моем видеоплеер классе:

var video_player_url = "" 

class VideoPlayer: UIViewController { 

@IBOutlet weak var video_view: UIWebView! 

override func viewDidLoad() { 
    self.video_view.loadHTMLString("<iframe width=\"\(video_view.frame.width)\" height=\"\(video_view.frame.height)\" src=\"https://www.youtube.com/embed/\(video_player_url)\" frameborder=\"0\" allowfullscreen></iframe>", baseURL: nil) 
    super.viewDidLoad() 
    // Do any additional setup after loading the view. 
} 

Вот мой videoTableController класс, который требует, чтобы:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    self.performSegueWithIdentifier("video_player_segue", sender: self) 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    let indexPath = self.tableView.indexPathForSelectedRow 

    video_player_url = video_urls[indexPath!.row] 
    } 

ответ

2

В prepareForSegue, класс был экземпляр уже, но это может еще не загружены с StoryBoard. Вот как он может дать вам контроллер назначения внутри prepareForSegue. Общей методикой является установка некоторой другой переменной в классе, а затем в viewWillAppear в контроллере назначения, используйте это значение, чтобы делать то, что вы хотите сделать.

class VideoPlayer : ViewController { 
    var video_player_url: String? 
    @IBOutlet weak var video_view: UIWebView! 

    override func viewWillAppear(animated: Bool) { 
     if let url = self.video_player_url { 
      self.video_view.loadHTMLString("<iframe width=\"\(video_view.frame.width)\" height=\"\(video_view.frame.height)\" src=\"https://www.youtube.com/embed/\(video_player_url)\" frameborder=\"0\" allowfullscreen></iframe>", baseURL: nil) 
     } 

    } 

} 

И в контроллере представления таблицы ...

class VideoTableController : UITableViewController { 
    // stuff goes here 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    let indexPath = self.tableView.indexPathForSelectedRow 
    // verify that indexPath is not nil or your app will crash. 
    let destinationController = segue.destinationViewController as! VideoPlayer 
    destinationController.video_player_url = video_urls[indexPath!.row] 
} 
+0

Это работало отлично спасибо! –