質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

9228閲覧

Container viewでの親ビューの取得 Swift3

beginer_dev

総合スコア16

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2016/09/23 10:45

編集2016/09/23 12:02

Container viewを用いて上半分を動画ビュー
下半分をTableviewで動画を選択するように実装しているのですが
下のtableviewから上の動画ビューの再生を制御したくて親ビューの取得をしたいですが以下のコードで動画ビューのプレイヤーを取得再生を試みたのですが

Swift3

1let parentController = self.parent as! ViewController 2parentController.playerView!.playVideo()

Could not cast value of type 'UINavigationController' (0x1b367f748) to 'アプリ名.ViewControll

で型違いでcastできなかったので別の方法でUIviewcontrollerにidをつけと以下のコードで

Swift3

1let parent = storyboard!.instantiateViewController(withIdentifier: "player"); 2parent.viewDidLoad()

viewdidloadは読めるようになったのですがviewdidloadからplayVideo()を読んでも何も反応がありませんでした。

tabelviewから動画ビューを制御する方法他にありましたら教えてください。

動画ビューコード

import UIKit import youtube_ios_player_helper //class ViewController: UIViewController ,UITableViewDelegate, UITableViewDataSource, YTPlayerViewDelegate { class ViewController: UIViewController, YTPlayerViewDelegate { @IBOutlet weak var playerView: YTPlayerView? var appDelegate:AppDelegate = UIApplication.shared.delegate as! AppDelegate override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. self.playerView?.delegate = self self.playerView?.sizeToFit() let vars = ["playsinline": 1, "controls": 2, "showinfo": 0, "origin":"https://www.google.com"] as [String : Any] playerView?.load(withVideoId: self.appDelegate.selectMV, playerVars: vars) print("読み込みVideo確認",self.appDelegate.selectMV) } func playerViewDidBecomeReady(_ playerView: YTPlayerView) { print("通過確認中") playerView.stopVideo() playerView.playVideo() } }

追記

実装状況

オレンジ:ViewCon
水色:UpperCon
赤:LowerConのように回答頂いたコードを利用し試みましたが
Could not cast value of type 'UINavigationController' (0x10f188f18) to 'アプリ名.ViewController' (0x10c679bf0).
(lldb)

となり同様のエラーとなりました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

画像のようなContainer Viewを使用したプロジェクトがあった場合、そのUIViewControllerを取得するには以下のようなコードで取得します。

下のViewControllerのイベントはDelegateで取得して上のViewControllerに伝えています。

s

swift

1 2// ------ ViewController ------ 3 4import UIKit 5 6class ViewController: UIViewController , LowerViewControllerDelegate{ 7 8 var upper: UpperViewController! 9 var lower: LowerViewController! 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 14 upper = self.childViewControllers[0] as! UpperViewController 15 print(upper) 16 lower = self.childViewControllers[1] as! LowerViewController 17 lower.delegate = self 18 print(lower) 19 } 20 21 func play() { 22 upper.play() 23 } 24} 25 26// ------ UpperViewController ------ 27 28import UIKit 29 30class UpperViewController: UIViewController { 31 32 func play() { 33 print("Push! play") 34 } 35} 36 37 38// ------ LowerViewController ------ 39 40protocol LowerViewControllerDelegate: class { 41 func play() 42} 43 44import UIKit 45 46class LowerViewController: UIViewController { 47 48 weak var delegate: LowerViewControllerDelegate! 49 50 @IBAction func pushPlay(_ sender: UIButton) { 51 delegate?.play() 52 } 53}

投稿2016/09/23 11:18

_Kentarou

総合スコア8490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

beginer_dev

2016/09/23 12:00 編集

上記のコードをお借りして試したのですが同様のエラーが出ました。 質問に画像を付けて追記させて頂きます。 確認の程よろしくお願いします。
beginer_dev

2016/09/25 07:46

型違いは、 let nav = self.childViewControllers[0] as! UINavigationController lower = nav.topViewController as! SelectTVC! で対応できました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問