私は今、家にどんなものが何個あるかメモしておくアプリを作っています。
使用している外部ライブラリはspreadsheetViewというライブラリを使って表にまとめていきます。
とても長々コードを書いてしまって申し訳ないのですが、どうしても自分一人では考えることができない状況に陥ってしまいました。
その状況というものを説明します。
spreadsheetViewの表にpickerViewで選択したフルーツの個数をtextFieldに打ち込んで、それが表の適切な部分に表示されていくものを作っています。
spreadsheetViewの性質上、表示を更新して、文字が記入されているように見せていると考えています。しかし、表示を更新した際、一度入力した文字が消えて、新しい個数が記入されます。
そこで、一度記入したものを残したまま次の個数を書き込めるようにしたいです。
もこしておける機能があったりするのでしょうか、それともcellをstaticのように宣言するとできるのでしょうか。
本当に申し訳ないのですが、どうしても思いつきません。アイデアだけでいいので助言していただけないでしょうか。
よろしくお願いします。
swift
1import UIKit 2import SpreadsheetView 3 4class ViewController: UIViewController, SpreadsheetViewDataSource, SpreadsheetViewDelegate, UIPickerViewDelegate, UIPickerViewDataSource { 5 6 7 8 @IBOutlet var spreadsheetView: SpreadsheetView! 9 @IBOutlet var testScoretextField: UITextField! 10 11 var labelData: [String] = ["りんご","みかん","いちご","バナナ","メロン"] 12 13 var fruitsName: [String] = [] 14 15 var fruitsCount: Int? = 0 16 17 var fruitsNameCode = 0 18 19 20 //pickerViewのコード 21 22 //pickeViewの数 23 func numberOfComponents(in pickerView: UIPickerView) -> Int { 24 return 1 25 } 26 27 //pickeViewの中の行の数 28 func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 29 return labelData.count 30 } 31 32 //pickeViewの中に表示するデータ 33 func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 34 return labelData[row] 35 } 36 37 //pickeViewで選択されたのを取り出す 38 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 39 self.spreadsheetView.reloadData() 40 fruitsName = [] 41 fruitsName = [labelData[row]] 42 fruitsCount = Int(testScoretextField.text!) 43 if let firstIndex = labelData.firstIndex(of: fruitsName[0]) { 44 print("インデックス番号: (firstIndex)") 45 fruitsNameCode = firstIndex 46 47 } 48 49 } 50 51 //アプリを起動して画面を開いたら。っていうコード 52 override func viewDidLoad() { 53 // Do any additional setup after loading the view. 54 55 56 super.viewDidLoad() 57 spreadsheetView.register(MyLabelCell.self, forCellWithReuseIdentifier: MyLabelCell.identifier) 58 spreadsheetView.delegate = self 59 spreadsheetView.dataSource = self 60 view.addSubview(spreadsheetView) 61 } 62 // spreadsheetViewを表示する場所 63 override func viewDidLayoutSubviews() { 64 super.viewDidLayoutSubviews() 65 spreadsheetView.frame = CGRect(x: 125, y: 250, width: view.frame.size.width, height: view.frame.size.height-100) 66 } 67 68 //spreadsheetViewの縦列の数 69 func numberOfColumns(in spreadsheetView: SpreadsheetView) -> Int { 70 return 2 71 } 72 73 //spreadsheetViewの横列の数 74 func numberOfRows(in spreadsheetView: SpreadsheetView) -> Int { 75 return labelData.count 76 } 77 78 //spreadsheetViewのセルの縦大きさ 79 func spreadsheetView(_ spreadsheetView: SpreadsheetView, widthForColumn column: Int) -> CGFloat { 80 return 80 81 } 82 83 //spreadsheetViewのセルの横大きさ 84 func spreadsheetView(_ spreadsheetView: SpreadsheetView, heightForRow row: Int) -> CGFloat { 85 return 40 86 } 87 88 //spreadsheetViewの中のセルを表示します 89 func spreadsheetView(_ spreadsheetView: SpreadsheetView, cellForItemAt indexPath: IndexPath) -> Cell? { 90 91 let cell = spreadsheetView.dequeueReusableCell(withReuseIdentifier: MyLabelCell.identifier, for: indexPath) as! MyLabelCell 92 if indexPath.section == 0 { 93 cell.setup(with: labelData[indexPath.row]) 94 } 95 if indexPath.section == 1 { 96 if indexPath.row == fruitsNameCode { 97 cell.setup(with: String(fruitsCount!)) 98 } 99 } 100 return cell 101} 102 103 104 105//spreadsheetViewで難しかったので真似する 106class MyLabelCell: Cell { 107 static let identifier = "MyLablelCell" 108 109 private let label = UILabel() 110 111 public func setup(with text: String) { 112 label.text = text 113 label.textAlignment = .center 114 contentView.addSubview(label) 115 } 116 117 override func layoutSubviews() { 118 super.layoutSubviews() 119 label.frame = contentView.bounds 120 } 121} 122 123 124 125} 126 127``` 128 129本当に長々と失礼しました。教えていただけると本当にたすかります。 130よろしお願いします。
あなたの回答
tips
プレビュー