SSブログ

[Swift] [メモ] NavigationControllerの「戻る」ボタンの謎と、どう実装で回避するか? [Swift]

昨日の記事に載せた「戻る」ボタン

スクリーンショット 2016-01-09 22.08.29.png

ですが、戻る時のイベントを簡単にはコードでフェッチできないとのこと。

例えば最初の画面で一覧を表示し、リストのアイテムを選択するとそのアイテムを編集してから、
「戻る」ボタンで戻る、という(よくある)仕組みでは、「戻る」のタイミングで
編集結果を戻り先の画面に伝えたいような気がするのですが…

ま、自分でBar Button Itemを貼り付けて実装すればどうとでもなるのですが、 そうすると”矢印“のアイコンが無くなってしまうのでちょっと悲しいのです。 (アイコンなくてもいいじゃん、となるとこの記事は不要になります)

どうしようか考えてみましたが、下記のようなカンジで、画面が操作されたら
逐次元の画面に通知するのかな?
  1. 編集結果を受け付けるプロトコルを定義して遷移元のViewControllerで実装
  2. 画面遷移時に、自身(self)を遷移先に渡しておく。
  3. 編集画面では、逐次でdelegateを呼んで編集状況を反映させる。

TextFieldやTextViewのときはどうするのかなと思いましたが、これらのdelegateプロトコルの
textViewDidEndEditing関数で実装すれば良さそうです。

実験してみます。
  • 適当にNavigationControllerで遷移する画面を作る。
  • 遷移先にTextViewを貼ってdelegateを接続する。
  • 遷移先の画面でのViewControllerの宣言にUITextViewDelegateを追加する。
  • textViewDidEndEditing関数を実装する。

実験用にこんな感じでログ出ししてみます。
func textViewDidEndEditing(textView: UITextView) {
    print("textViewDidEndEditing")
}

実行してみると、TextViewをタップした編集状態から「戻る」ボタンで戻った場合でも、
戻る前にtextViewDidEndEditing関数が呼ばれました。

が、これだと、「やっぱり編集するのやーめた」としたい時がちょっと困りますね。

標準のメモアプリのように、編集キャンセルの機能を提供しない!、と割りきってしまうのもアリ?

編集結果を受け付けるプロトコルの実装では、受け付けた結果をすぐには反映せず、
cancel通知なしに戻ってきたら反映させる、とすればいいかな。

「戻ってきたら」の検知がまた面倒ですが…
viewWillAppearあたりで、編集結果の保存オブジェクトに中身があったら反映させる、とか?

うーん、なんかもう、そこまでするなら”矢印“アイコンを諦めちゃっても良いんじゃね?
という気にももなってしまいそうです。


タグ:SWIFT
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。