実現したいこと
VieControllerにあるTableVieのcellをタップするとcellに入っている情報をRegisterViewControllerで表示することは前までの質問でできたのですが、新たにListViewControllerを作りRegisterViewControllerの右上のボタンをタップするとListViewControllerのcellに表示したいです。
ソースコード一覧
ViewController
1import UIKit 2 3class ViewController: UIViewController { 4 5 @IBOutlet weak var table:UITableView! 6 var items:[Item] = [Item]() 7 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 11 table.register(TableViewCell.nib(), forCellReuseIdentifier: TableViewCell.identifier) 12 13 table.delegate = self 14 table.dataSource = self 15 16 self.setupItems() 17 } 18 19 func setupItems(){ 20 items = [Item(name:"a",date:"1"),Item(name:"b",date:"2"),Item(name:"c",date:"3"),Item(name:"d",date:"4"),Item(name:"e",date:"5"),] 21 } 22} 23 24extension ViewController: UITableViewDelegate,UITableViewDataSource{ 25 26 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 27 return items.count 28 } 29 30 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 31 let cell = tableView.dequeueReusableCell(withIdentifier: TableViewCell.identifier, for: indexPath) as! TableViewCell 32 cell.setcell(item: items[indexPath.row]) 33 return cell 34 } 35 36 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 37 tableView.deselectRow(at: indexPath, animated: true) 38 performSegue(withIdentifier: "registerControl", sender: items[indexPath.row]) 39 } 40 41 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 42 if segue.identifier == "registerControl"{ 43 let nextVC: RegisterViewController = segue.destination as! RegisterViewController 44 if let selecteditems = sender as? Item{ 45 nextVC.item = selecteditems 46 } 47 } 48 } 49}
RegisterViewController
1import UIKit 2 3class RegisterViewController: UIViewController { 4 5 @IBOutlet weak var registeredNameLabel: UILabel! 6 @IBOutlet weak var registeredDateLabel: UILabel! 7 @IBOutlet var addListButton:UIBarButtonItem! 8 9 var item: Item! 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 14 //MovieListに追加するためのボタン 15 addListButton = UIBarButtonItem(title: "リストへ追加", style: .plain, target: self, action: #selector(addListButton(_:))) 16 self.navigationItem.rightBarButtonItems = [addListButton] 17 18 registeredNameLabel.text = item.name 19 registeredDateLabel.text = item.date 20 } 21 //ボタン呼び出し 22 @objc func addListTapped(_ sender: UIBarButtonItem){ 23 print("Tapped") 24 performSegue(withIdentifier: "addItemToList", sender: item) 25 } 26 //Listへ追加する情報の受け渡し(今回の疑問点) 27 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 28 if segue.identifier == "addItemToList"{ 29 let nextListVC: ListViewController = segue.destination as! 30ListViewController 31 if let registeredItems = sender as? [Item]{ 32 nextListVC.list = registeredItems 33 } 34 } 35 } 36} 37
ListViewController
1import UIKit 2 3class ListViewController: UIViewController{ 4 5 var list:[Item] = [] 6 var allList:[Item] = [] 7 var selectedList:[Item] = [] 8 9 @IBOutlet weak var table:UITableView! 10 11 @IBAction func segmentSelcted(_ sender: UISegmentedControl) { 12 13 switch sender.selectedSegmentIndex { 14 case 0: 15 list = allList 16 case 1: 17 list = selectedList 18 default: 19 fatalError("caseでカバーできません") 20 } 21 table.reloadData() 22 } 23 24 override func viewDidLoad() { 25 super.viewDidLoad() 26 27 table.delegate = self 28 table.dataSource = self 29 } 30} 31 32extension ListViewController:UITableViewDelegate,UITableViewDataSource{ 33 34 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 35 list.count 36 } 37 38 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 39 let cell = tableView.dequeueReusableCell(withIdentifier: ListTableViewCell.identifier, for: indexPath) as! ListTableViewCell 40 cell.setcell(item: list[indexPath.row]) 41 return cell 42 } 43} 44
疑問点
質問1: RegisterViewControllerのaddListButtonが押された時にListViewControllerのlistに値を渡たいのですが遷移した値を渡す方法しか調べても出てこないので普通に代入すれば良いですか?
質問2: 今は仮に遷移する処理を書いたのですが、遷移はできるもののListViewControllerのcellに値は表示されていないのですがどうすれば良いですか?
ListViewControllerでTableViewCellを使っているのでそちらも載せておきます。
ListTableViewCell
1import UIKit 2 3class ListTableViewCell: UITableViewCell { 4 5 @IBOutlet var listNameLabel:UILabel! 6 @IBOutlet var listDateLabel:UILabel! 7 8 override func awakeFromNib() { 9 super.awakeFromNib() 10 // Initialization code 11 } 12 13 override func setSelected(_ selected: Bool, animated: Bool) { 14 super.setSelected(selected, animated: animated) 15 } 16 17 static let identifier = "TableViewCell" 18 19 static func nib() -> UINib{ 20 return UINib(nibName: "TableViewCell", bundle: nil) 21 } 22 23 func setcell(item:Item){ 24 self.listNameLabel.text = item.name as String 25 self.listDateLabel.text = item.date as String 26 } 27 28} 29
回答1件
あなたの回答
tips
プレビュー