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

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

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

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

1728閲覧

テーブルビューに2段のラベルを設けてテキストを表示する方法⇒05 TableView01よりTableView02に遷移し更にWebViewに遷移する方法

Tomzy

総合スコア104

Xcode

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/06/24 07:01

前提・実現したいこと

作りたい画面:
第1画面 TableView01 完成しています。

イメージ説明

第2画面 TableView02 完成しました。

イメージ説明

この画面の項目をタップした場合、WebViewに遷移し、タップされた項目に対応したURLを表示したい。

発生している問題
TableView01よりTableView02に遷移して表示させることはできました。TableView02の項目をタップした場合、それに対応したURLを表示せず、画面のナビゲーションバーとタブバーは表示されますが、中間が白紙のままです。

イメージ説明

約100個あるURLを効率よく表示する方法を教えてください。

作成したコードは下記のとおりです。
コード1
TableView02コードのエッセンス部分は下記のとおりです。

// TableView02.swift //中略 class TableView02: UIViewController, UITableViewDataSource, UITableViewDelegate { @IBOutlet var tableView02: UITableView! var selectedIndexPathInViewController: NSIndexPath! let texts00 = ["01:自動で始まり終わる", //中略 let texts00URL = ["https://vimeo.com/150761576", "https://vimeo.com/150759960", "https://vimeo.com/150759960", "https://vimeo.com/150759960", //中略 "https://vimeo.com/150759960"] //中略 let texts01URL = ["https://vimeo.com/150759960", "https://vimeo.com/150759960", //中略 "https://vimeo.com/150759960"] //中略 let subtexts00 = ["動画の基本的な見方", "", "", //中略 //teratail助言2追加 var texts : [[String]]! var subtexts : [[String]]! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. // Prepare interstitial Ad UIViewController.prepareInterstitialAds() // Show iAd self.canDisplayBannerAds = true //self.setupFriends() texts = [texts00,texts01,texts02,texts03,texts04,texts05,texts06,texts07,texts08] subtexts = [subtexts00,subtexts01,subtexts02,subtexts03,subtexts04,subtexts05,subtexts06,subtexts07,subtexts08] tableView02.delegate = self tableView02.dataSource = self let nib = UINib(nibName: "CustomCell", bundle: nil) tableView02.registerNib(nib, forCellReuseIdentifier: "Cell") } // テーブルビューのタイトルを表示 //中略 return label } func tableView(tableView: UITableView, numberOfRowsInSection section:Int) -> Int { return texts[selectedIndexPathInViewController.row].count } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { //中略 return cell } //テーブルビューのセルがタップされた処理 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { //セルのインデックスパス番号を出力 print("タップされた2番目セルのインデックスパス:\(indexPath.row)") selectedIndexPath = indexPath //cellが選択された場合 //toDetailViewへ遷移するためにsegueを呼び出す performSegueWithIdentifier("toDetailView", sender: self) print("ここまで来た02") // let stroyboard = self.storyboard // let detailViewController = stroyboard?.instantiateViewControllerWithIdentifier("DetailViewController") as? DetailViewController } //テーブルビューのセルがタップされた処理 var selectedIndexPath: NSIndexPath! override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { if (segue.identifier == "toDetailView") { print("ここまで来た03") let subVC02 = (segue.destinationViewController as? DetailViewController)! subVC02.selectedIndexPathInViewController = selectedIndexPath print("ここまで来た04") } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }

コード2
DetailViewController.swift WebViewを表示する画面のファイルコード

//中略 import Foundation import UIKit import iAd class DetailViewController: UIViewController, UIWebViewDelegate { @IBOutlet weak var WebView: UIWebView! var selectedIndexPathInViewController: NSIndexPath! var urlString : String? override func viewDidLoad() { super.viewDidLoad() print("ここまで来た04a") // Prepare interstitial Ad UIViewController.prepareInterstitialAds() // Show iAd self.canDisplayBannerAds = true print("ここまで来た04") //画面一杯にWebを表示 let WebView : UIWebView = UIWebView() WebView.delegate = self WebView.frame = self.view.bounds self.view.addSubview(WebView) print("ここまで来た05") print("渡されたULRString:\(urlString)") //中略 // //ページが読み終わったときに呼ばれる関数 // func webViewDidFinishLoad(webView: UIWebView) { // print("ページ読み込み完了しました!") // } // //ページを読み始めた時に呼ばれる関数 // func webViewDidStartLoad(webView: UIWebView) { // print("ページ読み込み開始しました!") // } // override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }

ご参考事項
AAA
iMac27 OS-X11.5 El Capitan
Xcode 7.3.1

BBB
コードに書き込んだURLは、ダミーですが表示はされます。

CCC
https:///www. 問題を回避するinfo.plistの操作
Allow Arbitrary LoadsをYesにする操作は行っております。

DDD
結びつきは下記の画像のとおりです

イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

DetailViewControllerにURLを渡していない

TableView02からDetailViewControllerにURLを渡していませんので渡してあげましょう。

swift

1//TableView02 2override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 3 : 4 subVC02.urlString = <ここでURLをセットする> 5 : 6}

WebViewにURLを渡していない

TableView02から受け取ったURLをWebViewに渡してあげましょう。

swift

1//DetailViewController 2 : 3 print("渡されたULRString:\(urlString)") 4 5 //渡されたURLをWebViewにリクエストする 6 let url = NSURL(string: urlString!) 7 let request = NSURLRequest(URL: url!) 8 WebView.loadRequest(request) //リクエスト! 9 :

おまけ

現在のソースでは、Storyboardで設置したWebViewの上に、コードで作ったWebViewが乗っかってしまっていますので、コードで作っている部分を削除しましょう。

swift

1//DetailViewController 2 : 3 //画面一杯にWebを表示 4 //let WebView : UIWebView = UIWebView() //不要 5 WebView.delegate = self //これは必要!!(ただし、Storyboardで設定すれば不要) 6 //WebView.frame = self.view.bounds //不要 7 //self.view.addSubview(WebView) //不要 8 :

ひとまずこの辺で。

投稿2016/06/24 07:44

fuzzball

総合スコア16731

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

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

Tomzy

2016/06/24 08:42

TableView02に ご指摘のとおり override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { if (segue.identifier == "toDetailView") { let subVC02 = (segue.destinationViewController as? DetailViewController)! subVC02.urlString = "https://vimeo.com/150761576" にして //DetailViewController : print("渡されたULRString:\(urlString)") //渡されたURLをWebViewにリクエストする let url = NSURL(string: urlString!) let request = NSURLRequest(URL: url!) WebView.loadRequest(request) //リクエスト! にしましたら、ひとつのURLに対応する画面はできました。ありがとうございました。それにおまけのアドバイスもありがとうございました。 しかし、私は let texts00URL = ["https://vimeo.com/150761576", "https://vimeo.com/150759960", "https://vimeo.com/150759960", "https://vimeo.com/150759960", //中略 "https://vimeo.com/150759960"] //中略 let texts01URL = ["https://vimeo.com/150759960", "https://vimeo.com/150759960", //中略 "https://vimeo.com/150759960"] に対応する100個余りのURLを表示したいのです。 新たに var textsURL : [[String]]! textsURL = [texts00URL,texts01URL,texts02URL,texts03URL,texts04URL,texts05URL,texts06URL,texts07URL,texts08URL] を加えて、模索しています。このアレイを使ってURLを表示する方法を教えてください。
fuzzball

2016/06/24 09:00

これでいける‥かも知れません。 subVC02.urlString = textsURL[selectedIndexPathInViewController.row][selectedIndexPath.row]
Tomzy

2016/06/24 10:00

解決しました。 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { if (segue.identifier == "toDetailView") { let subVC02 = (segue.destinationViewController as? DetailViewController)! subVC02.urlString = textsURL[selectedIndexPathInViewController.row][selectedIndexPath.row] でTableView02で選んだ行のURLが表示されました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問