この記事は3年以上前に書かれた記事で内容が古い可能性があります
iOS(Swift)入門の入門
GWなのでiOSアプリ作りに入門してみた。
■完成品
選択したアイテムの詳細画面が表示されるというもの
■躓きポイント
□TableViewControllerってどう使う?
(1)コードを書くファイルを作成
(2)StoryBoardでNavigationControllerを配置
※クラス名の結びつけを忘れずに
(3)作成したファイル編集
1.最初に読む関数、必要な処理があれば記載する(任意)
override func viewDidLoad() { super.viewDidLoad() }
2.セクションの数を指定
※今回は一つ
override func numberOfSections(in tableView: UITableView) -> Int { return 1 }
3.データの数を指定
※今回は指定したリストの数だけ
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.TableList.count }
4.セルの編集
※indexPath.rowに何行目かの数字が入る
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell", for: indexPath) let img = UIImage(named:"\(ImageList[indexPath.row])") let imageView = tableView.viewWithTag(1) as! UIImageView imageView.image = img let label1 = tableView.viewWithTag(2) as! UILabel label1.text = "\(TableList[indexPath.row])" let label2 = tableView.viewWithTag(3) as! UILabel label2.text = "\(TableListDetail[indexPath.row])" return cell }
これでTableが表示されるようになる
□遷移した後の画面に変数を引き継ぎたい
(1)storyboardの編集
segueの線引きとidentifierの指定(identifierの値は任意)
(2)遷移元のファイル編集
先ほど指定したidentifierの値を使ってprepare関数を追加する(画面遷移の際に呼ばれる関数)
override func prepare(for segue : UIStoryboardSegue, sender: Any?){ super.prepare(for: segue, sender: sender) if segue.identifier == "toTableSubView" { // インスタンス作成 let TableSV = segue.destination as! TableSubView // 変数の受け渡し TableSV.indexno = self.indexno TableSV.quoteLabel = self.result TableSV.quoteImage = self.resultimg }
(3)遷移先のファイル編集
こんな感じで普通に使える(varで変数の宣言は必要)
LabelSubView.text = quoteLabel ImageSubView.image = UIImage(named: quoteImage!) LabelSubViewDetail.text = SubViewDetail[indexno]
■StoryBoard
■遷移前画面
import UIKit class TableViewController: UITableViewController { // set variables let TableList = ["Nobunaga", "Hideyoshi", "Ieyasu"] let TableListDetail = ["Koroshiteshimae", "Nakasetemiseyou", "Nakumadematou"] let ImageList = [ "img1", "img2", "img3"] var indexno = 0 var result : String? var resultimg : String? let quoteLabel = "test" override func viewDidLoad() { super.viewDidLoad() print("func viewDidLoad loaded") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } override func numberOfSections(in tableView: UITableView) -> Int { print("func numberOfSections loaded") return 1 } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { print("func tableView numberOfRowsInSection loaded") return self.TableList.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell", for: indexPath) let img = UIImage(named:"\(ImageList[indexPath.row])") // Configure the cell... let imageView = tableView.viewWithTag(1) as! UIImageView imageView.image = img let label1 = tableView.viewWithTag(2) as! UILabel label1.text = "\(TableList[indexPath.row])" let label2 = tableView.viewWithTag(3) as! UILabel label2.text = "\(TableListDetail[indexPath.row])" let c = "\(indexPath.row)" print(c) return cell } // get cell label value override func tableView(_ tableView: UITableView, didHighlightRowAt indexPath: IndexPath) { print("func tableView didHighlightRowAt loaded") print(TableList[indexPath.row]) result = TableList[indexPath.row] resultimg = ImageList[indexPath.row] indexno = indexPath.row } override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){ tableView.deselectRow(at: indexPath, animated: false) print("func tableView didSelectRowAt loaded") } override func prepare(for segue : UIStoryboardSegue, sender: Any?){ super.prepare(for: segue, sender: sender) if segue.identifier == "toTableSubView" { print("func prepare loaded") print("result is " + result!) print("result image is " + resultimg!) let TableSV = segue.destination as! TableSubView TableSV.indexno = self.indexno TableSV.quoteLabel = self.result TableSV.quoteImage = self.resultimg } } }
■遷移後画面
import Foundation import UIKit class TableSubView: UIViewController { // varialble to get valut from previous var indexno = 0 var quoteLabel : String? var quoteImage : String? let SubViewDetail = [ "殺してしまえホトトギス", "鳴かせてみせようホトトギス", "鳴くまで待とうホトトギス"] @IBOutlet weak var LabelSubView: UILabel! @IBOutlet weak var ImageSubView: UIImageView! @IBOutlet weak var LabelSubViewDetail: UILabel! override func viewDidLoad() { super.viewDidLoad() print("func viewDidLoad loaded") LabelSubView.text = quoteLabel ImageSubView.image = UIImage(named: quoteImage!) LabelSubViewDetail.text = SubViewDetail[indexno] } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
多分めちゃくちゃな書き方だがひとまず動いた。感動。
■画像入手元
いらすとや
■参考
一通り実施すると流れについてわかる
Start Developing iOS Apps (Swift)
■続き
この続きはこちら