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

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

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

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

Q&A

解決済

2回答

1499閲覧

swift サイドメニューの画面移行(ブラウザ)について

ives

総合スコア19

Swift

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

0グッド

0クリップ

投稿2018/08/20 15:44

編集2018/08/21 17:11

swift

1import UIKit 2 3class MenuViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 4 5 let TODO2 = ["Youtube", "Buzzvideo", "Instagram","Twitter","ニコニコ動画","FC2動画","Google"] 6 let parameters = ["Youtube": "Buzzvideo", "Instagram": "Twitter","ニコニコ動画":"FC2動画"] 7 8 @IBOutlet weak var menuView: UITableView! 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 } 13 14 func segueToFirstViewController() { 15 self.performSegue(withIdentifier: "toFirstViewController", sender: self.parameters) 16 } 17 18 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 19 if segue.identifier == "toFirstViewController" { 20 let MenuViewController = segue.destination as! MenuViewController 21 FirstViewController.parameters = sender as! [String : String] 22 } 23 24 menuView.delegate = self 25 menuView.dataSource = self 26 } 27 28 override func didReceiveMemoryWarning() { 29 super.didReceiveMemoryWarning() 30 // Dispose of any resources that can be recreated. 31 } 32 33 override func viewWillAppear(_ animated: Bool) 34 { 35 super.viewWillAppear(animated) 36 37 let menuPos = self.menuView.layer.position 38 self.menuView.layer.position.x = -self.menuView.frame.width 39 UIView.animate( 40 withDuration: 0.5, 41 delay: 0, 42 options: .curveEaseOut, 43 animations: { 44 self.menuView.layer.position.x = menuPos.x 45 }, 46 completion: { bool in}) 47 } 48 49 override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) 50 { 51 super.touchesEnded(touches, with: event) 52 for touch in touches 53 { 54 if touch.view?.tag == 1 55 { 56 UIView.animate(withDuration: 0.2, 57 delay: 0, 58 options: .curveEaseIn, 59 animations: 60 { 61 self.menuView.layer.position.x = -self.menuView.frame.width 62 }, 63 completion: 64 { 65 bool in self.dismiss(animated: true, completion: nil) 66 } 67 ) 68 } 69 } 70 } 71 72 73 74 //追加③ セルの個数を指定するデリゲートメソッド(必須) 75 func tableView(_ menuView: UITableView, numberOfRowsInSection section: Int) -> Int { 76 return TODO2.count 77 } 78 79 //追加④ セルに値を設定するデータソースメソッド(必須) 80 func tableView(_ menuView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 81 // セルを取得する 82 let cell: UITableViewCell = menuView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 83 // セルに表示する値を設定する 84 cell.textLabel!.text = TODO2[indexPath.row] 85 return cell 86 } 87} 88```![![イメージ説明](29962e4f601365878a6e210eff9728d7.png)] 89> 上記の写真のようにサイドメニューから各サービスをブラウザで開きたいのですがtableviewは最初に表示するFirstViewControllerではなく専用のMenuViewControllerで繋いでるのでどこに画面移行するコードを持って行ってよいかわかりません。どなたか教えていただけると嬉しいです。説明不足や意味不明と言う場合も返信を下されば説明し直します。どうかよろしくお願いします。

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

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

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

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

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

ives

2018/08/22 14:33

サイドメニューがあるMenuViewControllerからどうやってWKWebvIewのあるFirstViewControllerにブラウザを表示するか聞きたいです。
guest

回答2

0

ベストアンサー

いまさら回答しても仕方がないかもしれませんが、以前の回答でこの部分は答えなかったので…。

まずやりたいことを普通の言葉で考えてから仕組みを分割して、各々の方法を検索すればできるのではないでしょうか?

① MenuViewのtableViewのセルをタップしたときに(セルをタップしたときに対応する値を配列から取得する?)

② タップしたセルに対応するURLをFirstViewControllerのWKWebvIewに送って(画面遷移dismissかな?と値渡し)
③ MenuViewを引っ込めて

④ 受け取ったURLが表示されるようにWKWebvIewを更新する。

こんなかんじで一つ一つ理解していけばいいのではないでしょうか?

「全部教えてください」ではなく、ピンポイントでわからない部分を質問すれば、ここはいい人多いから
質問に答えてくれると思いますし、Taratail内の過去の質問を調べるだけでもできるのでは?と思います。

とりあえず、①は僕でしたら
tableViewがタップされたときにタップされたセルを認識して配列に格納してあるURLを取得するようにします。
なのでまず、[swift tableView タップされたセルを取得する]とかで検索してみます。

投稿2018/08/22 21:15

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ives

2018/08/23 03:13

わざわざ再度ご回答頂きありがとうございます。 あなたのような相手の立場になれる方に会えて良かったです。 調べ方もわかったので参考にしてやって行きたいと思います。 初心者ゆえに失礼な形での質問についてもすみませんでした。 これから、あなたのようなプログラマを目指して頑張って行きたいと思います。 本当にありがとうございます。
guest

0

どこに画面移行するコードを持って行ってよいかわかりません

どこに記述しても構わないのですが、MenuViewControllerで処理するのが簡単だとは思います。
サイドメニューを処理しているのはMenuViewControllerなのですよね?

投稿2018/08/21 02:05

t_obara

総合スコア5488

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

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

ives

2018/08/21 03:16

クラスが違うので繋げられないんですよ泣 他に方法がわからないので教えて頂けたら嬉しいです。
t_obara

2018/08/21 03:19

storyboardを利用して直接は無理です。 コードを利用して、他のViewControllerに依頼しないと。
ives

2018/08/21 05:01

それについて書いてあるサイトとか教えて頂けませんか?
ives

2018/08/21 17:10

ご返信ありがとうございます。サイトの方見ましたがいまいち理解できません。他のサイトも調べましたが理解できませんでした。上記にMenuViewControllerのコードを貼っておきますのでアドバイス下さったら嬉しいです。 わからない点 それぞれの項目(youtubeやニコ動等)をどうやってサイドメニューに表示しタップした時にwebviewkit(FirstViewContorller)に表示するか。タップ動作をさせるのでラベルとかボタンで繋げた方が良いか。 すみません初心者なもので理解が遅いですがお助け頂けたら嬉しいです。どうかよろしくお願いします。
t_obara

2018/08/21 17:46

サイドメニューに各項目の表示はできているのでは? 具体的にどのような表示をさせたいのでしょうか? また、一つの質問としては規模が大きくなるため、細かく分割してお聞きされると回答が得られやすいと思いますよ。 UITableViewでメニューを表示しているのであれば、タップした時のイベントが取れるので、そちらで処理を記載すべきでしょう。 どれが選択されたかもそこでわかります。 その後、FirstViewControllerにどのように処理を移管するかは、FirstViewControllerからMenuViewControllerにどのように遷移したのか次第かと。
ives

2018/08/22 02:35

サイドメニューに各項目の表示はできています。 項目をタップした時にそのサービス(サイト等)がwebkit上に表示するようにしたいです。 わからない点は実際にどのように繋いでどのようなコードを書いて良いかわかりません。自分で調べて見た結果サイドメニューの解説サイトはあるものの各項目を表示する解説サイトは見つかりませんでした。 コードを書いて頂くのは大変かと思いますがここが最後の頼みの綱なので教えていただけると非常に助かります。
xAxis

2018/08/22 06:35

ちょっと厳しい事を言う様だけども >コードを書いて頂くのは大変かと思いますが って言うのは推奨していない質問にある >コードをください・デバッグしてください等の丸投げの質問 >何かを作りたいのでコードを書いてほしい、学校の課題を解いてほしい等の質問は、具体的にプログラミングで困っている質問ではないと考え、推奨していません。 >問題や質問は実際に調査や作業に取り組み、具体的なところで生まれると考えるためです。 >まずは実際に作業に取り組み、つまづいたところで投稿をしてみてください。 にモロに抵触しちゃいます。なのでまずは自分でやってみてから。話はそれからです。 SideMenuっていうライブラリ、とっても有名なライブラリなのでGitHubにDemoやらExampleがあるはずです。そういうのを読むと自分がやりたいことのとっかかりになることが多いのでまずはそういうコードを読んでみましょう。
ives

2018/08/22 07:01

もちろん全部コードを書いてくださいとつもりではないです(誤解を生み申し訳ありません) 初心者でそもそもどうやって書き始めたら良いかの検討もつかないのでこう言う風に書くんだよと言う例文を提供して下さったら非常に助かります。と言いたかったのです... もちろんgithubや色々なサイトをみて調べましたが正直どれも理解できなくて困り果てていました。特にgithubは見た事ないコードや文法ばかりで初心者で独学でやっている私には右も左もわかりません。(それも勉強のうちだと思っていますがこのアプリをなるべく速く完成させないとマズイのです...) そんな中ここで教えて頂いたことを見よう見まねで書いたり繋げたりしてやっとここまでたどり着きましたが、そもそも入りがわからないのです。 今、sidemenuのtableview(cell)上にbuttonを置いてactionで繋げてそれをタップしたらfirstviewcontrollerのwebkitに表示されるプログラムが書きたいのですがif だけ書いて止まってしまっています。 千里の道も一歩からと言う言葉の通り困って自己解決するのも大切だとは承知していますが時間があまりないのです(私事で申し訳ありません)もちろん時間があれば困りながら調べながら自分でやってみるのですが今回ばかりはそうもいかず、、、 どうか皆さんのような上級者の方々に私のレベルがどれくらいか察して頂き、その上でレベルに合わせたアドバイスを頂ければ本当に助かります。特にxAxisさんには日頃からお世話になっていますのでお手数だとは思いますがその点踏まえて教えて頂ければ感謝です。どうかよろしくお願い申し上げます。
fuzzball

2018/08/22 07:18

「レベルに合わせたアドバイスを」と言うならば、 こちらからは「レベルに合わせた物を作れ」と言わせていただきます。
ives

2018/08/22 07:40

そうですよね..大変申し訳ありません... ただこれは頼まれたものなので... やはりfuzzballさんの言う通り自分のレベルを上げてからそこから作って見ます... その際に出てきた質問等に答えて頂ければありがたいです。 今回は本当にすみませんでした。自分で頑張って見ます。 そのような厳しい事を言ってくれる事にも感謝したいと思います。 お手数お掛けし申し訳ありませんでした。自分で頑張って見ます。
退会済みユーザー

退会済みユーザー

2018/08/22 18:58

「お手数お掛けし申し訳ありませんでした。自分で頑張って見ます。」 と言うのであれば、質問を「解決済み」にすべきでしょう。 あわよくば、回答を得ようとするその姿勢に疑問を感じます。 また、 「千里の道も一歩からと言う言葉の通り困って自己解決するのも大切だとは承知していますが時間があまりないのです」と、 回答者の善意を、まるで「課題のために利用」しているように見えるその態度も疑問です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問