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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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++と共存することが意図されています

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

1回答

1047閲覧

SegementSlideを用いViewControllerに遷移できず、困っております。

rainyeveryday

総合スコア22

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++と共存することが意図されています

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

1クリップ

投稿2020/04/21 11:44

編集2020/04/21 12:19

DataAPIを用いてYoutubeの動画をまとめたアプリを作るために、GetDataという名前の、レスポンスをプロパティに保存しておくクラスを仲介して、BaseViewControllerから、PageViewControllerという名前の、ページを表示するViewControllerに動画の情報を渡して表示をしようと試みています。

以下のコードをシミュレーターで実行したところ、PageViewControllerのtableViewに何も表示されませんでした。レスポンスの取得はできております。そのため、PageViewControllerへの遷移がうまく行われていないと判断しましたが、どのようにすれば遷移できるのか、ご教授お願いします。基本もあまりできていない初心者ですが、よろしくお願い致します。

GetDataクラスです

Swift

1import Foundation 2import Alamofire 3import SwiftyJSON 4 5class GetData { 6 7 var publishedAtArray = [String]() 8 var titleArray = [String]() 9 var imageURLStringArray = [String]() 10 var youtubeURLArray = [String]() 11 var channelTitleArray = [String]() 12 var videoIdArray = [String]() 13 14 func getData(text: String) { 15 16 let url = text.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) 17 let parameters = ["part": "snippet"] 18 AF.request(url!, parameters: parameters, encoder: URLEncodedFormParameterEncoder.default).response { (response) in 19 switch response.result { 20 case .success: 21 for i in 0...18 { 22 23 let json: JSON = JSON(response.data as Any) 24 let videoId = json["items"][i]["id"]["videoId"].string! 25 let title = json["items"][i]["snippet"]["title"].string! 26 let imageURLString = json["items"][i]["snippet"]["thumbnails"]["default"]["url"].string 27 let youtubeURL = "https://www.youtube.com/watch?v=(videoId)" 28 let channelTitle = json["items"][i]["snippet"]["channelTitle"].string 29 30 self.videoIdArray.append(videoId) 31 self.titleArray.append(title) 32 self.imageURLStringArray.append(imageURLString!) 33 self.youtubeURLArray.append(youtubeURL) 34 self.channelTitleArray.append(channelTitle!) 35 36 } 37 break 38 case .failure(let error): 39 print(error) 40 break 41 } 42 } 43 } 44}

BaseViewControllerです

Swift

1import UIKit 2import SegementSlide 3 4class BaseViewController: SegementSlideViewController { 5 6 let data = GetData() 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 reloadData() 11 scrollToSlide(at: 0, animated: true) 12 } 13 14 override var headerView: UIView?{ 15 16 let headerView = UIImageView() 17 headerView.isUserInteractionEnabled = true 18 headerView.contentMode = .scaleAspectFit 19 headerView.image = UIImage(named: "header") 20 let headerHeight: CGFloat 21 if #available(iOS 11.0, *) { 22 headerHeight = view.frame.height/4 + view.safeAreaInsets.top 23 } else { 24 headerHeight = view.frame.height/4 + topLayoutGuide.length 25 } 26 27 headerView.heightAnchor.constraint(equalToConstant: headerHeight).isActive = true 28 29 return headerView 30 } 31 32 override var titlesInSwitcher: [String]{ 33 return ["ボーダーコリー","ニュース","天気","ペット","かわいい動物","神社"] 34 } 35 36 override func segementSlideContentViewController(at index: Int) -> SegementSlideContentScrollViewDelegate? { 37 switch index { 38 case 0: 39 data.getData(text: "https://www.googleapis.com/youtube/v3/search?key=AIzaSyAN7YG_Y_2GjCBpDeN7XEYoaqSfJyoGpsk&q=ボーダーコリー&part=snippet&maxResults=19&order=date") 40 return PageViewController() 41 42 case 1: 43 data.getData(text: "https://www.googleapis.com/youtube/v3/search?key=AIzaSyAN7YG_Y_2GjCBpDeN7XEYoaqSfJyoGpsk&q=ニュース&part=snippet&maxResults=19&order=date") 44 return PageViewController() 45 46 case 2: 47 data.getData(text: "https://www.googleapis.com/youtube/v3/search?key=AIzaSyAN7YG_Y_2GjCBpDeN7XEYoaqSfJyoGpsk&q=天気&part=snippet&maxResults=19&order=date") 48 return PageViewController() 49 50 case 3: 51 data.getData(text: "https://www.googleapis.com/youtube/v3/search?key=AIzaSyAN7YG_Y_2GjCBpDeN7XEYoaqSfJyoGpsk&q=ペット&part=snippet&maxResults=19&order=date") 52 return PageViewController() 53 54 case 4: 55 data.getData(text:"https://www.googleapis.com/youtube/v3/search?key=AIzaSyAN7YG_Y_2GjCBpDeN7XEYoaqSfJyoGpsk&q=かわいい動物&part=snippet&maxResults=19&order=date") 56 return PageViewController() 57 58 case 5: 59 data.getData(text: "https://www.googleapis.com/youtube/v3/search?key=AIzaSyAN7YG_Y_2GjCBpDeN7XEYoaqSfJyoGpsk&q=神社&part=snippet&maxResults=19&order=date") 60 return PageViewController() 61 62 default: 63 data.getData(text: "https://www.googleapis.com/youtube/v3/search?key=AIzaSyAN7YG_Y_2GjCBpDeN7XEYoaqSfJyoGpsk&q=音楽&part=snippet&maxResults=19&order=date") 64 return PageViewController() 65 66 } 67 } 68} 69

PageViewControllerです

Swift

1import UIKit 2import SegementSlide 3import Alamofire 4import SDWebImage 5import SwiftyJSON 6 7class PageViewController: UITableViewController, SegementSlideContentScrollViewDelegate { 8 9 let data = GetData() 10 let refresh = UIRefreshControl() 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 tableView.refreshControl = refresh 15 refresh.addTarget(self, action: #selector(update), for: .valueChanged) 16 } 17 18 @objc func update(){ 19 tableView.reloadData() 20 refresh.endRefreshing() 21 } 22 23 @objc var scrollView: UIScrollView{ 24 return tableView 25 } 26 27 override func numberOfSections(in tableView: UITableView) -> Int { 28 return 1 29 } 30 31 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 32 return data.titleArray.count 33 } 34 35 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 36 37 let cell = UITableViewCell(style: .subtitle, reuseIdentifier: "Cell") 38 cell.selectionStyle = .none 39 let profileImageURL = URL(string: data.imageURLStringArray[indexPath.row] as String)! 40 41 cell.imageView?.sd_setImage(with: profileImageURL, completed: { (image, error, _, _) in 42 43 if error == nil { 44 cell.setNeedsLayout() 45 } 46 }) 47 48 cell.textLabel?.text = data.titleArray[indexPath.row] 49 cell.textLabel?.adjustsFontSizeToFitWidth = true 50 cell.detailTextLabel?.adjustsFontSizeToFitWidth = true 51 cell.textLabel?.numberOfLines = 5 52 cell.detailTextLabel?.numberOfLines = 5 53 54 return cell 55 } 56 57 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 58 59 let webViewController = WebViewController() 60 let url = data.youtubeURLArray[indexPath.row] 61 UserDefaults.standard.set(url, forKey: "url") 62 present(webViewController, animated: true, completion: nil) 63 64 } 65 66 override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 67 return view.frame.size.height/5 68 } 69 70 override func viewWillDisappear(_ animated: Bool) { 71 super.viewWillDisappear(true) 72 73 data.titleArray.removeAll() 74 data.imageURLStringArray.removeAll() 75 data.youtubeURLArray.removeAll() 76 data.channelTitleArray.removeAll() 77 data.videoIdArray.removeAll() 78 } 79} 80

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

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

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

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

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

guest

回答1

0

ベストアンサー

とりあえずこれで動きましたけど、いろいろ手直しが必要な気がします…。

swift

1class GetData { 2 // 略 3 4 // プロパティ追加 5 weak var delegate: PageViewController? 6 7 func getData(text: String) { 8 // 略 9 case .success: 10 for i in 0...18 { 11 12 // 略 13 14 } 15 // 読み込みが終わったら、表示を更新 16 self.delegate?.update() 17 break 18}

swift

1class BaseViewController: SegementSlideViewController { 2 3 // ここには data は不要 4 //let data = GetData() 5 6 // 略 7 8 override func segementSlideContentViewController(at index: Int) -> SegementSlideContentScrollViewDelegate? { 9 switch index { 10 case 0: 11 // url を PageViewController に渡す 12 let url = "https://www.googleapis.com/youtube/v3/search?key=AIzaSyAN7YG_Y_2GjCBpDeN7XEYoaqSfJyoGpsk&q=ボーダーコリー&part=snippet&maxResults=19&order=date" 13 return PageViewController(url: url) 14 15 // 以下同様

swift

1class PageViewController: UITableViewController, SegementSlideContentScrollViewDelegate { 2 3 let data = GetData() 4 let refresh = UIRefreshControl() 5 6 // コンストラクタを追加 7 convenience init(url: String) { 8 self.init(nibName:nil, bundle:nil) 9 data.delegate = self 10 data.getData(text: url) 11 } 12 13 // 以下略

投稿2020/04/21 13:18

hoshi-takanori

総合スコア7895

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問