You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Jun 20, 2023. It is now read-only.
Auto layoutを用いてViewの配置を行っている時、Viewのサイズをプログラム上で調整したい場合、そのやり方はいくつかありますが、
簡単な方法の一つは”制約の値を変える”ということになります。
今回のケースだと、TextViewとViewControllerのViewとの間のマージンの制約の値を変更します。
この制約の値は初期値では0(つまりマージンなし)ですが、キーボードが出現したときにキーボードの高さの分だけ制約を大きくすれば良いとなります。
TODOアプリを作ってみようシリーズの第2回目の演習課題です
内容
前回 ( #1 )に引き続き、今度は新しくToDoを入力し追加できるようにします。
目的
アプリの仕様
前回のアプリをさらに発展させて、ToDoを追加できる画面を追加します。
遷移
ToDo一覧画面上部にナビゲーションバーを配置し、ToDo追加画面へ遷移するボタンを配置します。
ToDo追加画面
追加画面は上部にキャンセルと完了ボタンがあり、それぞれタップすると�以下のように遷移します。
追加画面にはToDo用のUITextViewがありToDoを追加できるようにします。
ToDoは複数行入力できるようにしてください。
実装の方針
Navigation Controllerに追加 19a155c
レギュレーション通りの画面を作るためには右上にボタンを設置する必要があります。iOSアプリでよく目にする、画面上部のバーは”UINavigationBar”です。
UINavigationControllerを用いるとこのUINavigationBarを利用することができます。
そのため、UINavigationControllerでメインのViewControllerを管理するようにstoryboardでViewControllerの構成を変更します。
また右上に+ボタンを追加します。これは”Bar Button Item” を選択してドロップし、設定を変更します。
最後にボタンタップ時のハンドラを追加して完了です。
新しいViewControllerを追加してToDoを追加できるようにする
新規クラスを追加し表示する 35b3164
先ほどの+ボタンをタップしたら新しく作成したViewControllerを表示させます。
UIViewControllerのサブクラスとして、AddTodoControllerのクラスを新規ファイルから作成します。
次にstoryboard上にViewControllerのオブジェクトを新たに配置し, クラスを”AddTodoController”, Storyboard IDを同じく”AddTodoController”とします。
また、先ほどのボタンタップ時のハンドラでこのAddTodoControllerを生成して表示します。
※この時、キャンセルボタンと完了ボタンを置くためにUINavigationControllerで表示を行います。
AddToDoViewControllerのレギュレーション反映 11820a2
レギュレーションを反映するために、各パーツを配置し、Autolayoutを設定します。
テキスト入力エリアに使うクラスは UITextView です。複数行のテキスト入力や表示の際によく使われるクラスです。
このViewを配置して上下左右をpinで止めるAutolayoutを設定します。
キャンセルボタン、doneボタンはstoryboardからではなくコード上から追加します。
このようにすると、NavigationBarの左上にキャンセルボタンが出現し、タップされると
cancelButtonTapped
が呼ばれます。doneボタンも同様にします。
ここまでの状態でも入力はできるのですが、長い文章を入力するとキーボードの下に潜り込んでしまい、テキストを見ることができなくなってしまいます。
この不具合は次のコミットで直します。
キーボード表示時にTextViewのサイズを変更する d6a319e
�キーボードの下にTextViewが潜り込まないようにするためには”キーボードが表示されたタイミングでTextViewのサイズを変える”ことで対応します。
キーボードが出現したことを検知する
キーボードが出現した時には、UIKeyboardWillShowNotification のキー名でNSNotificationが通知されます。
この通知を受け取れるようにobserverとして登録します。
(�注意: dealloc時にobserverを解除しないとクラッシュを引き起こします)
通知ごとの詳細は通知されるメソッドの引数であるNSNotificationインスタンスのuserInfoというNSDictionaryのプロパティの中に含まれています。
今回キーボードのサイズが必要なのですが、以下のようにして取得できます。
TextViewのサイズを変更する
Auto layoutを用いてViewの配置を行っている時、Viewのサイズをプログラム上で調整したい場合、そのやり方はいくつかありますが、
簡単な方法の一つは”制約の値を変える”ということになります。
今回のケースだと、TextViewとViewControllerのViewとの間のマージンの制約の値を変更します。
この制約の値は初期値では0(つまりマージンなし)ですが、キーボードが出現したときにキーボードの高さの分だけ制約を大きくすれば良いとなります。
そのためには、以下のステップを経る必要があります。
となります。実行結果は以下のようになります。
わかりやすくするため、TextViewの色を緑にしてあります。
ToDoが追加されたら反映する 091a55d
キャンセルボタン/Doneボタンが押された時に、AddTodoViewControllerを閉じ、追加があればToDoに追加を行います。
ToDoが追加された時、元のViewControllerはどのようにして新しく追加されたToDoを知るためにDelegateパターンを用います。
以下の処理を追加します。
その他情報
教材
スタートブランチ
show-todo
ここまでの完成品
add-todo
The text was updated successfully, but these errors were encountered: