Swiftで遊ぼう! - 960 - JSONチュートリアルも改訂
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
- 初心者はここから!-> 50オヤジでもできるiOS開発
- 私の本業、オフィシャルなブログ-> Life-LOG
- Swift 3 対応
少しずつ復習のスピードが速くなってます。
Swiftで遊ぼう! - 959 - KVODemoも説明を変更
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
- 初心者はここから!-> 50オヤジでもできるiOS開発
- 私の本業、オフィシャルなブログ-> Life-LOG
- Swift 3 対応
自分でも理解しがたいチュートリアルを少し改訂しました。
Swiftで遊ぼう! - 958 - URLSessionの記事をもう少し分かりやすくしました。
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
- 初心者はここから!-> 50オヤジでもできるiOS開発
- 私の本業、オフィシャルなブログ-> Life-LOG
- Swift 3 対応
過去記事の改訂ばかりしてます(^_^;)
Swiftで遊ぼう! - 957 - 最後のパートをSwift 3に対応
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
- 初心者はここから!-> 50オヤジでもできるiOS開発
- 私の本業、オフィシャルなブログ-> Life-LOG
- Swift 3 対応
アップルのチュートリアルをSwift 3に向けて改訂していました。実は3度目の復習になるんですが忘れていることが多く、いまだにすんなり理解できません(^_^;)
繰り返すたびに理解度は増していると思えますが覚えていないメソッドやプロパティに溢れていて、勘違いして理解している部分にも遭遇します。
Swiftで遊ぼう! - 956 - このチュートリアルもSwift 3に向けて変更最終段階
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
- 初心者はここから!-> 50オヤジでもできるiOS開発
- 私の本業、オフィシャルなブログ-> Life-LOG
- Swift 3 対応
ちぐはぐなアップデイト中
久しぶりに振り返ると本当に忘れていることや理解していないことが多いのに愕然としてます(^_^;)
Swiftで遊ぼう! - 955 - セグエが変われば戻り方も変更
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
- 初心者はここから!-> 50オヤジでもできるiOS開発
- 私の本業、オフィシャルなブログ-> Life-LOG
- Swift 3 対応
NavigationControllerを組み込んだTableViewControllerからViewControllerに遷移(セグエ)した場合、Cancelボタンの挙動を考えないとちゃんと動かない。分かったつもりでも納得できない自分がいたんでちょっと勉強(^_^;)
チュートリアルを読み飛ばしていたら混乱した部分が出てきたんで勉強しました。右上のMealViewController上で、「Cancel」ボタンが押した場合、セグエ元が2カ所あるんで挙動を考えないといけません。
左上のMealTableViewControllerに埋め込んでいるNavigationControllerのBar Button Itemの「+」が押された時はModallyにNavigationControllerが作られてMealViewControllerを表示していることになります。
ここで考えなければならないインスタンス・プロパティが、presentingViewControllerです。
presentingViewController
ViewControllerを「Presented Modally」で遷移させると「present(_:animated:completion:) 」メソッドでViewControllerを作成することになるけど、ストーリーボードでセグエを作っているとこのメソッドは見えてきません。
presentingViewControllerプロパティはpresent(_:animated:completion:) メソッドを使って表示されるViewControllerがセットされます。もしこのメソッド以外の遷移をした場合、1つ前のViewControllerがセットされたままになります。遷移前のViewControllerが存在しなければ「nil」を持つようです。
ということは上の例で「+」を押したときに「present(_:animated:completion:) 」を使ってMealViewControllerが表示されました。実際はNavigationControllerに載っかったMealViewControllerなんで次のBool型は「true」ということになります。
let isPresentingInAddMealMode = presentingViewController is UINavigationController
そしてModallyに遷移したVIewControllerを消すメソッドはdismiss()メソッドになり次のように処理できます。
if isPresentingInAddMealMode { dismiss(animated: true, completion: nil) }
では、MealTableViewControllerのCellを選択して遷移させた場合、セグエは「Show」になるため「prepare()」メソッドは使われなかったことになります。presentingViewControllerにはMealTableViewControllerがセットされ、if節の外に外れます。
じゃあ次にセグエがShowの場合、新しいMealViewControllerが作らているけど、元に持っているNavigationControllerの上にMealViewControllerをスタックして積み上げているので、navigationControllerプロパティを持っているはずです。条件式を次のようにすればいいんでしょう。
} else if let owningNavigationController = navigationController { owningNavigationController.popViewController(animated: true) }
popViewController(animated:)
このメソッドはNavigationControllerが持っているメソッドで、一番上のスタックを消し去って再表示させます。まさに新しいスタックを作った時のキャンセルにぴったりです。
そして最後にそれ以外の条件ならエラーにします。
} else { fatalError("The MealViewController is not inside a navigation controller.") }
こう書いたけどしっくりしないな(^_^;)
Swiftで遊ぼう! - 954 - //MARK:
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
- 初心者はここから!-> 50オヤジでもできるiOS開発
- 私の本業、オフィシャルなブログ-> Life-LOG
- Swift 3 対応
Xcodeの基本的な機能でも知らないことが多い。コーディング中にコメントを書いて整理することも勧められています。「//MARK:」を使えば、コメントをソースコードの「ファンクション・メニュー(Functions menu)」でセクションタイトルにすることができ、編集したい関数を見つけやすくなります。
この書き方ですが、「//MARK:」の後にスペースを置いて「-」中線を入れ、スペースを加えてからコメントを加えるとファンクション・メニューにセクションを分けるラインが加わります。
この内容を下記に加えました。