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

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

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

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

Swift

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

Q&A

解決済

2回答

2534閲覧

モーダル遷移からプッシュ遷移に変更したい

sunglass

総合スコア303

Xcode

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

Swift

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

0グッド

0クリップ

投稿2020/08/27 06:29

編集2020/08/27 09:11

UITableViewのセルタップ時のモーダル画面遷移からプッシュ遷移に変更したいです。
(現在モーダル遷移は問題なく出来ています。)

やった事
1.[Edior]>[Embed In]>[Navigation Controller]を選択(Navigation Controllerを用意)
2.遷移元と遷移先のViewControllerをsegueで接続
3.segueのidentifierを設定
4.[Attributes Inspector]の[Kind]で[Show(e.g. Push)]に設定
5.下記のコードを追加

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // セルの選択を解除 table.deselectRow(at: indexPath, animated: true) // 次の画面へ performSegue(withIdentifier: "toPreViewController", sender: indexPath.row) }

・・・としたところ通常のモーダル遷移のままでした。
プッシュ遷移の実装方法が知りたいです。

詳しい方よろしくお願いします。

イメージ説明
Storyboardのイメージ画像追加

イメージ説明
Kind:Show(e.g.Push)設定画像

現在ミニマムで再現中です。

ミニマムだと再現できました。。
NavigationControllerを後付けだと上手くいかないのでしょうか・・・?
Stroyboard上に出てくるNavigationbarとBackボタンが自分のプロジェクト上には表示されていません。。

import UIKit class TestViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { @IBOutlet weak var tableView: UITableView! let TODO = ["牛乳を買う", "掃除をする", "アプリ開発の勉強をする"] func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return TODO.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // セルを取得する let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) // セルに表示する値を設定する cell.textLabel!.text = TODO[indexPath.row] return cell } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // セルの選択を解除 tableView.deselectRow(at: indexPath, animated: true) // 次の画面へ performSegue(withIdentifier: "toNext", sender: indexPath.row) } override func viewDidLoad() { super.viewDidLoad() } }

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

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

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

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

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

guest

回答2

0

StoryBoard で変更するのであれば、

  • 遷移先の View Controller を選択し、
  • Attributes inspector の Presentation で Fullscreen

を選択すれば、遷移先がフルスクリーンになるかと思います。

投稿2020/08/27 06:41

TsukubaDepot

総合スコア5086

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

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

sunglass

2020/08/27 07:29 編集

回答ありがとうございます。 フルスクリーンは設定済みでございます。。遷移する際に下から出てくるモーダル遷移ではなく、横にスライドするプッシュ遷移を実装したく質問投稿してみました。。
TsukubaDepot

2020/08/27 07:19

画面の下から出てくるから「モーダル (modal)」というのはちょっと違うと思います(たぶん、そこで入れ違いが出たのだと思いますが)。一般的にモーダルというのは、スライドの方法を問わず、最初に操作していた画面を残したまま、次の画面やダイアログを表示する方法のことを言います。 iOSに限らず、PDAと呼ばれていた時代から使われている遷移方法です。 https://qiita.com/st43/items/54baed2ac374ac969100
TsukubaDepot

2020/08/27 07:24

ちょっと確信が持てないのですが、通常のトランジッション (transition) では左右スライドは選択できなかったような気がします。左右スライドというのは、Navigation Controller のようなポップ・スタックするような遷移で使われるトランジッションだと理解しています。 過去の議論になりますが、もし強制的に左右スライドのトランジッションを使いたいのであれば、全てを Nagivation Controller の管理下に置き、Navigation Bar を隠す方法になるのかもしれません。ただし、この方法がこの先 OS のアップデートがあった場合にも使えるか否かはわかりません。 https://developer.apple.com/forums/thread/6176
sunglass

2020/08/27 07:28

回答ありがとうございます。。 「モーダル (modal)」の定義が曖昧だったためお手数おかけしてしまい申し訳ありませんでした。。 添付の記事のボタンをセルタップに変更してプッシュ遷移したいのですがなぜか上手くいきません。。 クリーンビルド等もしていますし、元々画面遷移自体は成功しています。 そこに追加でNavigationControllerを追加してsegueをPresent ModallyからShow(e.g.push)に変更したのですが・・
TsukubaDepot

2020/08/27 07:31

添付の記事、というのはどの記事のことになりますでしょうか(ご質問、コメントいずれにも他記事のリンクは無いようです)。 ちなみに、Navigation Controller はどこに追加されているのでしょうか。もしかしたら StoryBoard のスクリーンショットがあった方がいいかもしれませんので、必要に応じてご質問に追加していただければと思います。
sunglass

2020/08/27 08:46

添付の記事=https://qiita.com/st43/items/54baed2ac374ac969100 になります。StoryBoardのイメージ画像用意してみます。
TsukubaDepot

2020/08/27 09:10 編集

添付の記事とは、わたしが引用した記事のことですね。了解しました。
sunglass

2020/08/27 09:14

はい。 (わかり辛い説明で申し訳ありません。。) 先ほどミニマムで再現したところすんなりプッシュ遷移できました。。 後付けでやると上手く動作しない可能性ありそうです。。 (プッシュ遷移自体は再現出来たので)質問は一旦クローズします。。
guest

0

自己解決

プッシュ遷移は再現できたので一旦クローズドにします。

import UIKit class TestViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { @IBOutlet weak var tableView: UITableView! let TODO = ["牛乳を買う", "掃除をする", "アプリ開発の勉強をする"] func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return TODO.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // セルを取得する let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) // セルに表示する値を設定する cell.textLabel!.text = TODO[indexPath.row] return cell } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { // セルの選択を解除 tableView.deselectRow(at: indexPath, animated: true) // 次の画面へ performSegue(withIdentifier: "toNext", sender: indexPath.row) } override func viewDidLoad() { super.viewDidLoad() } }

投稿2020/08/27 09:15

sunglass

総合スコア303

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問