メモ帳アプリやTODOアプリなどでメモリストやTODOリストのページをタブごとで分別させて管理するアプリをよく見かけるのですが、そこにはページ(UITableView)を追加(生成)するという機能があります。
tableviewに加えタブの仕組みなどを最近勉強していますが、仕組みが全くわからず前に進めません・・・。
これは一体どのような仕組みで動いているのでしょうか?
少し大雑把な質問になっていたらすみませんm(_ _)m
特にUITableView(またはテーブルビューを含めたUIViewController)をボタンを押したら新規生成する機能について
アドバイスやコーディング、または参考になる記事などあればご教授のほどをお願いしたいです!
以下は実際にあるアプリのイメージです
新規タブと共にユーザーによって生成されたUITableView(タブのコンテンツ)
追記 8/19 14:45
アドバイスを元にデータだけを切り替える仕様で実装。
'[String]' has no member 'String'というエラーが発生。
import UIKit class ViewController: UIViewController { @IBOutlet weak var segmentButton: UISegmentedControl! @IBOutlet weak var tableview: UITableView! var data1 = ["dog","cat","fish","pug"] var data2 = ["river","forest","sea","mountain"] override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. tableview.delegate = self } } extension ViewController: UITableViewDelegate,UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if ( segmentButton.selectedSegmentIndex == 0) { return data1.count } else { return data2.count } } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell1", for: indexPath) var data = "" if (segmentButton.selectedSegmentIndex == 0) { data = data1.String(indexPath.row) //Value of type '[String]' has no member 'String' } else { data = data2.String(indexPath.row) //Value of type '[String]' has no member 'String' } cell.textLabel?.text = String(data) return cell } }
追記 8/20 5:50
1からやり直し、以下の方法で一つのtableviewファイルに複数のデータを反映させることに成功
・配列の法則に乗っ取り以下のように修正
data1.String(indexPath.row) → data1[indexPath.row]
・if文をswitchでUISegmentedControl.selectedSegmentIndexを判定するように変更
・NavigationControllerがあるとなぜかうまく動かなかったので削除
import UIKit class ViewController: UIViewController { @IBOutlet weak var segmentButton: UISegmentedControl! @IBOutlet weak var tableview: UITableView! let data1 = ["dog","cat","fish","pug"] let data2 = ["river","forest","sea","mountain"] override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. tableview.delegate = self tableview.dataSource = self } @IBAction func segmentedChanged(_ sender: Any) { tableview.reloadData() } } extension ViewController: UITableViewDelegate,UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { switch segmentButton.selectedSegmentIndex { case 0: return data1.count case 1: return data2.count default: break } return 0 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell1", for: indexPath) switch segmentButton.selectedSegmentIndex { case 0: cell.textLabel?.text = data1[indexPath.row] case 1: cell.textLabel?.text = data2[indexPath.row] default: break } return cell } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/19 05:50
2019/08/19 09:24
2019/08/19 09:28
2019/08/19 12:59
2019/08/19 21:02
2019/08/19 23:26