###前提・実現したいこと
Swift3.0でTableViewのセルをタップして別のStoryboardにあるViewControllerに画面遷移させたいのですが,
画面遷移させる以下のメソッド
Swift
1present(viewController, animated: true, completion: nil)
がTableViewクラスで実装できません.
このような場合はTableViewControllerを使うしか方法はないのでしょうか?
###発生している問題・エラーメッセージ
Use of unresolved identifier 'present'
###該当のソースコード
Swift
1/* 2 * FolderTableView.swift 3 */ 4import UIKit 5 6class FolderTableView: NSObject, UITableViewDelegate, UITableViewDataSource { 7 8 // 途中省略 9 10 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 11 12 let storyboard: UIStoryboard = UIStoryboard(name: "Task", bundle: nil) 13 14 let taskListViewController = storyboard.instantiateViewController(withIdentifier: "Task") 15 self.present(taskListViewController, animated: true, completion: nil) 16 ↑このメソッドで画面遷移させたい 17 } 18 19}
Swift
1/* 2 * FolderListViewController.swift 3 */ 4import UIKit 5import RealmSwift 6 7class FolderListViewController: UIViewController { 8 9 @IBOutlet weak var folderTableView: UITableView! 10 11 let folderTable = FolderTableView() 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 16 folderTableView.delegate = folderTable 17 folderTableView.dataSource = folderTable 18 19 } 20 21 // 省略 22 23} 24
###試したこと
・TableViewを呼び出しているFolderListViewController内でpresentメソッドを実装
→セルをタップした時にfolderTableView.delegate = folderTableの行で以下のエラーが発生
fatal error: unexpectedly found nil while unwrapping an Optional value
・presentメソッド用のViewControllerクラスを作成し,FolderTableViewでメソッドを呼び出す
→セルをタップした時に以下のエラーが発生
Warning: Attempt to present <skillup7.TaskListViewController: 0x7f98eb423650> on <skillup7.TestViewController: 0x7f98eb522230> whose view is not in the window hierarchy!
↓↓用意したViewControllerクラス↓↓
Swift
1/* 2 * TestViewController.swift 3 */ 4import UIKit 5 6class TestViewController: UIViewController { 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 11 // Do any additional setup after loading the view. 12 } 13 14 override func didReceiveMemoryWarning() { 15 super.didReceiveMemoryWarning() 16 // Dispose of any resources that can be recreated. 17 } 18 19 func send(viewController: UIViewController) { 20 self.present(viewController, animated: true, completion: nil) 21 } 22 23}
###補足情報(言語/FW/ツール等のバージョンなど)
言語:Swift 3.0
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/10 03:07