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

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

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

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

Swift 2

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

Q&A

解決済

1回答

2374閲覧

swift pagemenuライブラリを使っての遷移について

saju

総合スコア46

Swift

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

Swift 2

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

0グッド

0クリップ

投稿2016/08/20 17:27

編集2016/08/20 17:59

###前提・実現したいこと
pageMenuを使っていて、
tableVIewのcellをタップ(選択)すると別の画面に遷移する処理を書きたいのですがわかりません。
###発生している問題・エラーメッセージ

interfaceBuilderで元々のpageMenuの画面から別の画面にpresentModalyで結びました。(画面1枚1枚にnavigationControllerをつけている)
エラーメッセージにはhas no segue with identifier 'chatViewControllerFromCell'とありますが、
storyBoard segueにはchatViewControllerFromCellと入力できております。

よろしくお願いいたします

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<study_app.PageMenuViewController: 0x7fb0d970b990>) has no segue with identifier 'chatViewControllerFromCell''

###該当のソースコード

swift

1ここにご自身が実行したソースコードを書いてください 2 3func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 4 pageMenuViewController.goChatView() 5 } 6 7func goChatView() { 8 performSegueWithIdentifier("chatViewControllerFromCell", sender: nil) 9 }

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下の様にベースとなっているViewControllerからモーダル遷移を呼び出すとできます。
※ この場合はDelegateを使って呼び出しています。

swift

1 2import UIKit 3import PageMenu 4 5class ViewController: UIViewController, CAPSPageMenuDelegate, ViewController1Delegate { 6 7 var pageMenu : CAPSPageMenu? 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 12 var controllerArray : [UIViewController] = [] 13 14 let controller = storyboard?.instantiateViewControllerWithIdentifier("VC1") as! ViewController1 15 controller.title = "SAMPLE TITLE" 16 controller.delegate = self 17 controllerArray.append(controller) 18 19 let controller1 = storyboard?.instantiateViewControllerWithIdentifier("VC1") as! ViewController1 20 controller1.title = "SAMPLE TITLE1" 21 controller1.delegate = self 22 controllerArray.append(controller1) 23 24 let parameters: [CAPSPageMenuOption] = [ 25 .MenuItemSeparatorWidth(4.3), 26 .UseMenuLikeSegmentedControl(true), 27 .MenuItemSeparatorPercentageHeight(0.1) 28 ] 29 30 pageMenu = CAPSPageMenu(viewControllers: controllerArray, frame: CGRectMake(0.0, 0.0, self.view.frame.width, self.view.frame.height), pageMenuOptions: parameters) 31 self.view.addSubview(pageMenu!.view) 32 } 33 34 // モーダル遷移 35 func goChatView() { 36 performSegueWithIdentifier("chatViewControllerFromCell", sender: nil) 37 } 38} 39 40 41// ----------------------------- 42 43 44protocol ViewController1Delegate: class { 45 func goChatView() 46} 47 48class ViewController1: UIViewController, UITableViewDelegate, UITableViewDataSource { 49 50 @IBOutlet weak var tableView: UITableView! 51 weak var delegate: ViewController1Delegate! 52 53 override func viewDidLoad() { 54 super.viewDidLoad() 55 56 tableView.estimatedRowHeight = 20 57 tableView.rowHeight = UITableViewAutomaticDimension 58 } 59 60 // Data Array 61 var dataArray = ["One","Two","Three","Four","Five"] 62 63 // MARK: - TableView Delegate & DataSource 64 65 // Row Count 66 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 67 return dataArray.count 68 } 69 70 // Generate Cell 71 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 72 let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) 73 cell.textLabel?.text = dataArray[indexPath.row] 74 return cell 75 } 76 77 // Select Cell 78 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 79 tableView.deselectRowAtIndexPath(indexPath, animated: true) 80 81 // デリゲートメソッドを呼び出す 82 delegate?.goChatView() 83 } 84}

回答追記

PageMenuの中からも問題なく呼び出せたのでDelegateを使用しない例を載せておきます。

swift

1import UIKit 2import PageMenu 3 4class ViewController: UIViewController, CAPSPageMenuDelegate { 5 6 var pageMenu : CAPSPageMenu? 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 11 var controllerArray : [UIViewController] = [] 12 13 let controller = storyboard?.instantiateViewControllerWithIdentifier("VC1") as! ViewController1 14 controller.title = "SAMPLE TITLE" 15 controllerArray.append(controller) 16 17 let controller1 = storyboard?.instantiateViewControllerWithIdentifier("VC1") as! ViewController1 18 controller1.title = "SAMPLE TITLE1" 19 controllerArray.append(controller1) 20 21 let parameters: [CAPSPageMenuOption] = [ 22 .MenuItemSeparatorWidth(4.3), 23 .UseMenuLikeSegmentedControl(true), 24 .MenuItemSeparatorPercentageHeight(0.1) 25 ] 26 27 pageMenu = CAPSPageMenu(viewControllers: controllerArray, frame: CGRectMake(0.0, 0.0, self.view.frame.width, self.view.frame.height), pageMenuOptions: parameters) 28 self.view.addSubview(pageMenu!.view) 29 } 30} 31 32 33// ----------------------------- 34 35 36 37class ViewController1: UIViewController, UITableViewDelegate, UITableViewDataSource { 38 39 @IBOutlet weak var tableView: UITableView! 40 41 override func viewDidLoad() { 42 super.viewDidLoad() 43 44 tableView.estimatedRowHeight = 20 45 tableView.rowHeight = UITableViewAutomaticDimension 46 } 47 48 // Data Array 49 var dataArray = ["One","Two","Three","Four","Five"] 50 51 // MARK: - TableView Delegate & DataSource 52 53 // Row Count 54 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 55 return dataArray.count 56 } 57 58 // Generate Cell 59 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 60 let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) 61 cell.textLabel?.text = dataArray[indexPath.row] 62 return cell 63 } 64 65 // Select Cell 66 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 67 tableView.deselectRowAtIndexPath(indexPath, animated: true) 68 69 performSegueWithIdentifier("chatViewControllerFromCell", sender: nil) 70 } 71}

投稿2016/08/21 02:09

編集2016/08/21 09:52
_Kentarou

総合スコア8490

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

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

saju

2016/08/21 07:13

できました!ありがとうございます!4日ハマってました! ですが、なぜ今までの自分のコードのどこがいけなかったかがわかりません。 それについてもご指導いただけたら幸いです。
_Kentarou

2016/08/21 09:53 編集

今もう一度見なおしていたらDelegateを使わずに呼んでもModalでの遷移ができました。 自分も落ちたきがしたのですが、違う問題だったようです。 セル押下時に自分のViewControllerに対してperformSegueWithIdentifierを呼び出すだけでした。 segueの結び方等が悪かったのですかね、、、 回答も追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問