
※この記事は初心者の方や初めてアプリを作る人を対象にしています。
動作環境 Xcode Version 11.4 Swift version 5.2
今回はSaveボタンの修正とCancelボタンの実装をします。
今回したい事ですが、まず今のままではテキストフィールドに何も入力しなくても下記画像のようにメモの登録が可能な状態です。
なのでテキストフィールドに何も入力されていない時はSaveボタンを無効にしておきたいと思います。
その次にCancelボタンですが、まだ何も処理を書いていないので今のままだとボタンを押しても何も起きません。
なのでCancelボタンを押したらメモ一覧ページに戻るような処理を書いていきたいと思います。
まずモーダルウィンドウが開いた時(ロードされた時)のボタンを無効にしたいので、「MemoViewController.swift」に最初から書いてある「viewDidLoad」の中に処理を書いていきます。
override func viewDidLoad() {
super.viewDidLoad()
self.saveButton.isEnabled = false
}
ボタンを無効にしてる記述は3行目です。
「self.saveButton」はSaveボタンの事ですね。
そのあとの「isEnabled」って言うのがボタンを有効か無効にする事ができるやつです!
今回は無効にしたいので「false」を代入しておきましょう。
次にテキストフィールドに文字が入力されたら、ボタンを有効にしたいのでその処理を書いていきましょう!
テキストフィールドに文字が入力された場合、ボタンを有効にしたいので、テキストフィールドの値が変更された時に実行するメソッドを作ります。
下記画像のようにstoryboard上から紐づける事でメソッドを作ってくれます。
注意したいのでが、Eventの部分です。
ここを必ず「Editing Changed」として下さい。
こうする事でテキストフィールドの値が変更された時に実行するメソッドを追加してくれます。
Nameは「memoTextFieldChanged」にしています。
では今作った「memoTextFieldChanged」メソッドの処理を記述します。
@IBAction func memoTextFieldChanged(_ sender: Any) {
let memo = self.memoTextField.text ?? ""
self.saveButton.isEnabled = !memo.isEmpty
}
まず2行目から見ていきます。
テキストフィールドに何もテキストが入力されていない状態(nil)だったら「定数memo」に空文字を入れておきます。
次に3行目です。
「定数memo」が空文字じゃない状態(何かテキストが入力されている)だったらSaveボタンを有効にしたいので、空文字がどうか判断する「isEmpty」を使います。
「self.saveButton.isEnabled」と書いてあげて、「!memo.isEmpty」で定数memoの中が空文字かどうかチェックしています。
(!マークを使う事で空文字じゃない場合と否定しています。もし!マークがなかったら空文字の場合になります)
ではCancelボタンですが、まずCancelボタンが押された時のメソッドを作るので下記画像のようにして下さい。
ではここにコードを書いていきますね!
Cancelボタンの時は特に渡すデータがないので、Cancelボタンが押されたらモーダルウィンドウを閉じるだけでOKだと思います。
こう言う場合は「dismiss」と言う命令が使えます!
アニメーションは「true」で有効にして、completionで終わったあとの処理を書くのですが、今回は何もしないので「nil」としてあげればOKです!
@IBAction func cancel(_ sender: Any) {
self.dismiss(animated: true, completion: nil)
}
ではシュミレーターで確認して見ましょう!
冒頭の動画のようにテキストフィールドにテキストが入力されたらSaveボタンが押せるようになって、Cancelボタンを押せばモーダルウィンドウが閉じられていればOKです!
今回はボタンの処理をしていきました!
次はメモを削除してみましょう!
[…] Saveボタンですが、現状では「viewDidLoadメソッド」で無条件で無効になるように設定されています。それをテキストフィールドの中身があるかないかを判断して、中身がなければ「無効」中身があれば「有効」と言う形に変えていきます。ではその判定をするコードを書いていくのですが、実はもう下記コード部分で書いています。ちなみにメモアプリを作る#10の記事でやりました。MemoViewController.swiftの「viewDidLoadメソッド」の下あたりの下記コードです。 […]