現在TableViewの各Cellで異なる遷移先を試したくて上記のようなものを作ったのですが
四つの遷移先はTabBarに属させたくないのですがその場合どうすれば良いですか?
もしかしたら聞くまでもないことかもしれませんが、よろしくお願いします。
一応遷移元のコード載せときます。
import UIKit class FirstViewController: UIViewController { @IBOutlet weak var tableView: UITableView! var segues: [Segue] = [ Segue(segue: "segue0", title: "aaaaaaaa"), Segue(segue: "segue1", title: "bbbbbbbb"), Segue(segue: "segue2", title: "cccccccc"), Segue(segue: "segue3", title: "dddddddd") ] override func viewDidLoad() { super.viewDidLoad() tableView.delegate = self tableView.dataSource = self } } extension FirstViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath, animated: true) switch indexPath.row { case KindOfSegue.segue0.rawValue: self.performSegue(withIdentifier: KindOfSegue.segue0.segueIdentifier, sender: nil) case KindOfSegue.segue1.rawValue: self.performSegue(withIdentifier: KindOfSegue.segue1.segueIdentifier, sender: nil) case KindOfSegue.segue2.rawValue: self.performSegue(withIdentifier: KindOfSegue.segue2.segueIdentifier, sender: nil) case KindOfSegue.segue3.rawValue: self.performSegue(withIdentifier: KindOfSegue.segue3.segueIdentifier, sender: nil) default: break } } } extension FirstViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return segues.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) let segue = segues[indexPath.row] cell.textLabel?.text = segue.title cell.accessoryType = UITableViewCell.AccessoryType.disclosureIndicator return cell } } struct Segue { var segue = "" var title = "" } enum KindOfSegue: Int { case segue0 = 0 case segue1 = 1 case segue2 = 2 case segue3 = 3 var segueIdentifier: String { switch self { case .segue0: return "segue0" case .segue1: return "segue1" case .segue2: return "segue2" case .segue3: return "segue3" } } var cellTitle: String { switch self { case .segue0: return "" case .segue1: return "" case .segue2: return "" case .segue3: return "" } } }
Segueを削除して新しくファイルを4つ作りそれぞれのViewに割り当てました。
GyazoGIF参考動画
変更後
import UIKit private struct Segue { var title = "" let `class` : AnyClass } class FirstViewController: UIViewController { @IBOutlet weak var tableView: UITableView! private var segues: [Segue] = [ Segue(title: "aaaaaaaa", class: Segue0ViewController.self), Segue(title: "bbbbbbbb", class: Segue1ViewController.self), Segue(title: "cccccccc", class: Segue2ViewController.self), Segue(title: "dddddddd", class: Segue3ViewController.self) ] override func viewDidLoad() { super.viewDidLoad() self.tableView.rowHeight = 60 tableView.delegate = self tableView.dataSource = self } } extension FirstViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let segue = self.segues[indexPath.row] let vcClass = segue.class as! UIViewController.Type let vc = vcClass.init() self.navigationController?.pushViewController(vc, animated: true) tableView.deselectRow(at: indexPath, animated: true) } } extension FirstViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.segues.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) let segue = self.segues[indexPath.row] cell.textLabel?.text = segue.title // cell.accessoryType = UITableViewCell.AccessoryType.disclosureIndicator return cell } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/20 01:20 編集
2020/09/20 12:57
2020/09/20 15:06
2020/09/20 19:23
2020/09/21 06:11
2020/09/21 06:13
2020/09/21 09:15
2020/09/21 09:41
2020/09/21 11:56
2020/09/21 14:37