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

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

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

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

Q&A

解決済

1回答

3291閲覧

swift 画面遷移を共通メソッドにしたい。

sr2000

総合スコア39

Swift

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

0グッド

0クリップ

投稿2018/11/04 07:11

現在segueを使わず、画面遷移を行っています。
そこで毎回storyBoard名とstoryBoardIdを入力して、storyboardとviewControllerを取得するコードを書くのが面倒で、Utility.swiftというファイルを作成(新規作成時はcocoaクラスではなくswiftファイルを指定)してそこに引数をstoryBoardName,storyBoardIdにして
画面遷移する関数を用意して、coupunViewControllerのtabelViewのデリゲートメソッドないで利用してます。
現状はコメントアウトしてマスクしている箇所です。
しかしこの関数を使って画面遷移するとアプリが落ちてしまします。

わかる方がいらっしゃいましたら、ご教授宜しくおねがいします。

swift

1 2import Foundation 3import UIKit 4 5//共通メソッドはここに作成すること 6 7//利用テスト→確認済み 8func test() { 9 print("利用テスト") 10} 11 12//画面遷移 13//遷移方法→present 14//基本的な画面遷移にし利用 15//引数:StoryBoardName 16//引数:StoryBoardID 17//戻り値なし 18 19func changeViewPresent(storyBoardName: String, storyBaordId: String) { 20 //storyBaord取得 21 let storyBaord: UIStoryboard = UIStoryboard(name: storyBoardName, bundle: nil) 22 //viewController取得 23 let viewController: UIViewController = storyBaord.instantiateViewController(withIdentifier: storyBaordId) 24 //画面遷移 25 viewController.present(viewController, animated: true, completion: nil) 26 27} 28 29 30 31 32//画面遷移 33//遷移方法→push 34//navigationController利用時に必ず使うこと 35//引数:StoryBoardName 36//引数:StoryBoardID 37//戻り値なし 38 func changeViewPush1(storyBaordName: String, storyBoardId: String) { 39 //storyBaord取得 40 let storyBaord: UIStoryboard = UIStoryboard(name: storyBaordName, bundle: nil) 41 //viewController取得 42 let viewController: UIViewController = storyBaord.instantiateViewController(withIdentifier: storyBoardId) 43 //画面遷移 44 //UINavigationController.pushViewController(viewController) 45 viewController.present(viewController, animated: true, completion: nil) 46} 47 48class Vc: UIViewController { 49 50 //画面遷移 51 //遷移方法→push 52 //navigationController利用時に必ず使うこと 53 //引数:StoryBoardName 54 //引数:StoryBoardID 55 //戻り値なし 56 func changeViewPush2(storyBaordName: String, storyBoardId: String) { 57 //storyBaord取得 58 let storyBaord: UIStoryboard = UIStoryboard(name: storyBaordName, bundle: nil) 59 //viewController取得 60 let viewController: UIViewController = storyBaord.instantiateViewController(withIdentifier: storyBoardId) 61 //画面遷移 62 //navigationController?.pushViewController(viewController, animated: true) 63 //UINavigationController.pushViewController(ViewController) 64 } 65 66 67} 68

swift

1import UIKit 2 3class CouponViewController: UIViewController { 4 5 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 10 tableView.delegate = self 11 tableView.dataSource = self 12 // Do any additional setup after loading the view. 13 } 14 15 16 @IBOutlet weak var tableView: UITableView! 17 18 @IBAction func tappedSave(_ sender: Any) { 19 print("保存する") 20 } 21 22 23 /* 24 // MARK: - Navigation 25 26 // In a storyboard-based application, you will often want to do a little preparation before navigation 27 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 28 // Get the new view controller using segue.destination. 29 // Pass the selected object to the new view controller. 30 } 31 */ 32 33 34 35 36} 37 38extension CouponViewController: UITableViewDelegate, UITableViewDataSource { 39 40 //セルの行数 41 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 42 return 10 43 } 44 45 46 //セルの高さ 47 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 48 return 150 49 } 50 //セルの内容 51 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 52 let cell = tableView.dequeueReusableCell(withIdentifier: "couponCell", for: indexPath) as? CouponCell ?? CouponCell() 53 //cell.couponImage 54 cell.storeName.text = "餃子の王将" 55 cell.couponTitle.text = "餃子一人前サービス" 56 cell.couponText.text = "ここに詳しい内容がい記載されます!!" 57 cell.expirationDate.text = "2018年9月22日" 58 return cell 59 } 60 61 //選択時の処理 62 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 63 //処理 64 let storyBoard = UIStoryboard(name: "CouponDetail", bundle: nil) 65 let viewController = storyBoard.instantiateInitialViewController() as! UIViewController 66 //IDを指定しても可能だが、initであるときは不要→エラー回避 67 //let viewController = storyBoard.instantiateViewController(withIdentifier: "nav") 68 navigationController?.pushViewController(viewController, animated: true) 69 70 //テスト 71 //changeViewPresent(storyBoardName: "CouponDetail", storyBaordId: "nav") 72 //a.changeViewPush2(storyBaordName: "CouponDetail", storyBoardId: "nav") 73 //changeViewPush(storyBaordName: "CouponDetail", storyBoardId: "nav") 74 //a.changeViewPush(storyBaordName: "CouponDetail", storyBoardId: "nav") 75 //テストここまで 76 77 } 78 79} 80

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

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

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

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

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

fuzzball

2018/11/05 00:26

エラーメッセージを書いて下さい。
sr2000

2018/11/05 12:27

デバッグエリアに表示されているエラーメッセージです。changeViewPresentを実行しています。2018-11-05 21:25:11.993194+0900 study[3670:859437] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present modal view controller on itself. Presenting controller is <study.CouponDetailViewController: 0x10780c150>.' *** First throw call stack: (0x1a1d0fea0 0x1a0ee1a40 0x1ce81841c 0x1ce81aa38 0x1ce81b09c 0x1ce81a990 0x1ce81accc 0x100649030 0x10064c40c 0x10064c4c8 0x1cefd7c14 0x1cefd7e78 0x1cedd8cd0 0x1cedc6ccc 0x1cedf5fa0 0x1a1c9f7a8 0x1a1c9a43c 0x1a1c9a9dc 0x1a1c9a1cc 0x1a3f11584 0x1cedcd054 0x10064f484 0x1a175abb4) libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)
guest

回答1

0

ベストアンサー

self.present(viewController, animated: true, completion: nil)

おそらくこうでは?
取得したviewControllerから遷移させてますよ

投稿2018/11/05 02:45

kosanai

総合スコア471

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問