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

[Swift] UINavigationControllerの戻るボタンの"Back"の文字のみを消す方法 (矢印を残す) [Swift]

突然ですが、iPhoneアプリ開発の勉強を始めました。
個人的にハマったポイントについてメモを残していこうと思います。

まずは、UINavigationControllerで遷移する画面を作った時に、
自動的に表示される戻るボタンの横の文字表示について。

例えば標準のメモアプリでは、矢印アイコンのみで“Back”の文字がありません。
同じ動作をさせようとInterfaceBuilderの設定をいじってみても、
矢印ごと消えてしまうか矢印だけ消えて文字は残ってしまう動作に。

スクリーンショット 2016-01-09 22.08.29.png←これの、"Back"だけを消したい

どうやらInterfaceBuilderの設定ではこの動作はできず、以下のコードで実装するようです。
let back = UIBarButtonItem()
back.title = ""
self.navigationItem.backBarButtonItem = back

…なお、このコードは、
文字表示を消すViewControllerを呼び出すViewController』に書かなければなりません。
(文字表示を消したいViewController自体に書いても効果が無いです。不思議不思議)
ドコに書いても良さそうなので、呼び出し先毎に文字を変えたりもできそう。

※Navigation ItemのAttributes Inspectorの [Back Button]の設定ってどこに反映されるのでしょうか?
タグ:SWIFT

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