2016-05-01 24 views
1

私は、その中にたくさんのYouTube動画を持つテーブルビューを保持するVideoTableControllerクラスを持っています。webViewの読み込み速度を向上させる方法

ビデオが選択されると、指定されたyoutubeビデオを再生するWebビューを持つ別のView Controllerが起動されます。

私はvideoTableControllerのprepareForSegue関数でビデオをロードするようにしましたが、VideoPlayerコントローラがまだインスタンス化されていないので、video_view:UIWebViewの値を変更できませんprepareForSegue関数です。

このvideoPlayer()をprepareForSegue関数でインスタンス化してからVideoPlayer.video_view.loadHTMLString()の値を変更すると、videoPlayerが別のインスタンスがインスタンス化されるようにseguedするかどうかがわかりました?ここで

は、私は現在、私のVideoPlayerクラスに持っているものである:ここでは

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クラスです:prepareForSegueで

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

、クラスがすでにインスタンス化されているが、それはかもしれませんまだ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

はあなたに感謝! –