iOS の家計簿アプリをつくる(登録画面作成編)

advent_calendar アドベントカレンダー

はじめに

こちらは個人開発アプリができるまで by am10 Advent Calendar 2024の 9 日目の記事です。

9 日目は登録画面を作成します。
完成形はこんな感じです。

1

キャンセルボタン

まずはキャンセルボタンを実装します。
Register.swift ファイルを作成し下記のように実装します。

ContentView の登録ボタンの処理を下記のように修正します。

これでキャンセルボタンは完成です。iOS 15 からは dismiss で楽に画面を閉じることができます。

dismiss | Apple Developer Documentation
An action that dismisses the current presentation.

追加データ一覧

次に追加データ一覧を実装します。
RegisterView に下記を追加すれば削除もできる一覧の完成です。

購入日入力

購入日入力は下記を追加するだけです。

品名入力

品名入力は下記を追加するだけです。

金額入力

金額入力は下記を追加するだけです。

項目・サブ項目ピッカー

サブ項目ピッカーは項目選択時にリストを指定の項目の内容に変更する必要があるので項目とサブ項目ピッカーは 1 つの View として作成します。
CategoryPicker.swift ファイルを作成し下記のように実装します。

RegisterView に下記を追加すれば完成です。

サブ項目(categorySubValue)の未選択状態を nil として扱うと Picker 操作がしにくいので未選択は Category.unselectedValue として扱っています。

追加・更新ボタン

次に追加・更新ボタンを作成します。

追加

まずは下記のように追加処理を実装します。

追加したあとに別のデータ追加をする際は購入日と項目・サブ項目が同じ可能性があるのでクリア処理では品名と金額のみクリアしています。

更新

次に更新処理を実装します。

あとは下記のように一覧選択時に追加ボタンを更新ボタンに変更すれば更新処理は完成です。

レシート読み取りボタン

今回は下記を実装するだけです。読み取り処理はまた後で実装します。

交通系 IC カード読み取りボタン

今回は下記を実装するだけです。読み取り処理はまた後で実装します。

登録ボタン

登録ボタンは少し目立たせたいので背景塗りつぶしの角丸ボタンにします。
RoundedFillButtonStyle.swift ファイルを作成し下記のように実装します。

RegisterView に下記を追加すれば横幅いっぱいのオレンジ色の登録ボタンを表示できます。

登録処理

下記を追加してやれば登録処理は完成です。

サーバーに登録したあとローカル DB への保存もしています。登録処理が終わったあとはデータ表示画面に戻りたいはずなので画面を閉じるようにしています。

入力処理の改善

このままだと iPhone では品名・金額入力時のキーボードを閉じる手段がないのでキーボードを閉じられるようにします。
RegisterView に下記のように Field を追加し TextField の処理を修正します。

これで品名入力時に Enter 押下で金額テキストフィールドにフォーカスし、金額入力時に Enter 押下でキーボードを閉じるようになりました。
ついでに登録ボタン押下時にもキーボードを閉じるようにしました。
次にキーボードに閉じるボタンを追加します。
品名テキストフィールドなどの外側の VStack に下記のように toolbar を追加します。

これでキーボードを閉じられるようになりました。
こんな感じです。

2

iOS 15 からいろいろ追加されたのでキーボードの操作が楽になりました。

FocusState | Apple Developer Documentation
A property wrapper type that can read and write a value that SwiftUI updates as the placement of focus within the scene changes.
keyboard | Apple Developer Documentation
The item is placed in the keyboard section.

余白など調整

最後に余白などを調整し RegisterView の body はこんな感じです。

おわりに

これで登録画面も完成です。家計簿アプリとして最低限の機能はあるんじゃないでしょうか。

明日は交通系 IC カードの読み取り処理を作成予定です。

1人でアプリを作る人を支えるSwiftUI開発レシピ | 佐藤 剛士 |本 | 通販 | Amazon
Amazonで佐藤 剛士の1人でアプリを作る人を支えるSwiftUI開発レシピ。アマゾンならポイント還元本が多数。佐藤 剛士作品ほか、お急ぎ便対象商品は当日お届けも可能。また1人でアプリを作る人を支えるSwiftUI開発レシピもアマゾン配送商品なら通常配送無料。

コメント

タイトルとURLをコピーしました