[Swift] [メモ] NavigationControllerの「戻る」ボタンの謎と、どう実装で回避するか? [Swift]
昨日の記事に載せた「戻る」ボタン
ですが、戻る時のイベントを簡単にはコードでフェッチできないとのこと。
例えば最初の画面で一覧を表示し、リストのアイテムを選択するとそのアイテムを編集してから、
「戻る」ボタンで戻る、という(よくある)仕組みでは、「戻る」のタイミングで
編集結果を戻り先の画面に伝えたいような気がするのですが…
ま、自分でBar Button Itemを貼り付けて実装すればどうとでもなるのですが、 そうすると”矢印“のアイコンが無くなってしまうのでちょっと悲しいのです。 (アイコンなくてもいいじゃん、となるとこの記事は不要になります)
どうしようか考えてみましたが、下記のようなカンジで、画面が操作されたら
逐次元の画面に通知するのかな?
TextFieldやTextViewのときはどうするのかなと思いましたが、これらのdelegateプロトコルの
textViewDidEndEditing関数で実装すれば良さそうです。
実験してみます。
実験用にこんな感じでログ出ししてみます。
実行してみると、TextViewをタップした編集状態から「戻る」ボタンで戻った場合でも、
戻る前にtextViewDidEndEditing関数が呼ばれました。
が、これだと、「やっぱり編集するのやーめた」としたい時がちょっと困りますね。
標準のメモアプリのように、編集キャンセルの機能を提供しない!、と割りきってしまうのもアリ?
編集結果を受け付けるプロトコルの実装では、受け付けた結果をすぐには反映せず、
cancel通知なしに戻ってきたら反映させる、とすればいいかな。
「戻ってきたら」の検知がまた面倒ですが…
viewWillAppearあたりで、編集結果の保存オブジェクトに中身があったら反映させる、とか?
うーん、なんかもう、そこまでするなら”矢印“アイコンを諦めちゃっても良いんじゃね?
という気にももなってしまいそうです。
ですが、戻る時のイベントを簡単にはコードでフェッチできないとのこと。
例えば最初の画面で一覧を表示し、リストのアイテムを選択するとそのアイテムを編集してから、
「戻る」ボタンで戻る、という(よくある)仕組みでは、「戻る」のタイミングで
編集結果を戻り先の画面に伝えたいような気がするのですが…
ま、自分でBar Button Itemを貼り付けて実装すればどうとでもなるのですが、 そうすると”矢印“のアイコンが無くなってしまうのでちょっと悲しいのです。 (アイコンなくてもいいじゃん、となるとこの記事は不要になります)
どうしようか考えてみましたが、下記のようなカンジで、画面が操作されたら
逐次元の画面に通知するのかな?
- 編集結果を受け付けるプロトコルを定義して遷移元のViewControllerで実装
- 画面遷移時に、自身(self)を遷移先に渡しておく。
- 編集画面では、逐次でdelegateを呼んで編集状況を反映させる。
TextFieldやTextViewのときはどうするのかなと思いましたが、これらのdelegateプロトコルの
textViewDidEndEditing関数で実装すれば良さそうです。
実験してみます。
- 適当にNavigationControllerで遷移する画面を作る。
- 遷移先にTextViewを貼ってdelegateを接続する。
- 遷移先の画面でのViewControllerの宣言にUITextViewDelegateを追加する。
- textViewDidEndEditing関数を実装する。
実験用にこんな感じでログ出ししてみます。
func textViewDidEndEditing(textView: UITextView) { print("textViewDidEndEditing") }
実行してみると、TextViewをタップした編集状態から「戻る」ボタンで戻った場合でも、
戻る前にtextViewDidEndEditing関数が呼ばれました。
が、これだと、「やっぱり編集するのやーめた」としたい時がちょっと困りますね。
標準のメモアプリのように、編集キャンセルの機能を提供しない!、と割りきってしまうのもアリ?
編集結果を受け付けるプロトコルの実装では、受け付けた結果をすぐには反映せず、
cancel通知なしに戻ってきたら反映させる、とすればいいかな。
「戻ってきたら」の検知がまた面倒ですが…
viewWillAppearあたりで、編集結果の保存オブジェクトに中身があったら反映させる、とか?
うーん、なんかもう、そこまでするなら”矢印“アイコンを諦めちゃっても良いんじゃね?
という気にももなってしまいそうです。
タグ:SWIFT
コメント 0