読者です 読者をやめる 読者になる 読者になる

ViewControllerを閉じる方法 (Unwind Segueを使う)

ios iPhoneアプリ Swift okios okswift プログラム Storyboard

ViewControllerを閉じる

今、自分で、iPhoneアプリを作っているのですが、

ボタンをタップした時、segueで遷移した先のViewControllerにて [登録]ボタンを押して、登録完了後に、現在、起動中の登録画面の ViewControllerを閉じて、元の遷移元の画面に戻る

みたいな実装をしてたんですが、遷移先のViewControllerで

self.dismissViewControllerAnimated(true, completion: nil) 

とか書いても、ViewControllerが閉じないんですよね。

参考先のサイト on Qiita ViewControllerを閉じる

理解が足りないなー、と。

まずは、画面を閉じる方法から。

割りと、[ViewController 閉じる] ってやっても、あんまり引っかからないんですね笑

ちょっと、書いてみました。

参考にさせて頂いた所

[Swift]初心者向け!Segueを使った画面遷移方法

いや、すげー、分かりやすかったです。ありがとうございます。

Unwind Segue

Using Unwind Segues By Apple

Appleの公式サイトからすると、 UnwindSegueってのは、PushとかのSegueから戻る一つの方法って感じですかね。

他にも方法がある、って事なのかな。

Close Sample

今回のソースを Github にあげてます。

[TakahashiIkki/CloseSegueSample @github]

作成方法

サンプルプロジェクトの作成

Single Page Applicationを選択します。 f:id:ikkitang1211:20160623234342p:plain

プロジェクト名をCloseSegueSampleとしました。 f:id:ikkitang1211:20160623234412p:plain

OrgnizationNameとか隠してるけど、Githubに上げてるなら意味ないのかな?笑

初回は、ViewControllerが一つだけある状態です。 f:id:ikkitang1211:20160623234611p:plain

遷移先ViewControllerの作成

まずは、 あるViewController から遷移する遷移先のViewControllerを作成していきます。

今回は、 ViewController から ToViewControllerへ移る事とします。

ToViewControllerクラスを定義します。

f:id:ikkitang1211:20160623235116p:plain

NewFileをクリックして、 f:id:ikkitang1211:20160623235217p:plain

Cocoa Classs から、ToViewControllerクラスをUIViewControllerを継承して作成します。

f:id:ikkitang1211:20160623235246p:plain

はい。出来ました。 f:id:ikkitang1211:20160623235331p:plain

必要な簡単なクラスとimportとかだけ整理しました。 f:id:ikkitang1211:20160623235505p:plain

InterfaceBuilder上でSegueを定義

InterfaceBuilder上で画面遷移を作成していきます。

画面遷移を作成するのは簡単です。

まず、Main.storyboardを開いて、ViewControllerを追加します。

この追加したのが、ToViewControllerになります。

f:id:ikkitang1211:20160624000526p:plain

View Controllerをドラッグして、 現在ある、ViewControllerの横に置きます。

f:id:ikkitang1211:20160624000642p:plain

置いたら、こんな感じになります。

わかりやすいように、遷移元のViewControllerを黄色に。 遷移先のToViewControllerを緑色にします。

f:id:ikkitang1211:20160624000811p:plain

f:id:ikkitang1211:20160624000835p:plain

また、忘れないように、遷移先のToViewControllerを先ほど作ったToViewControllerクラスと結びつくようにします。

f:id:ikkitang1211:20160624001418p:plain

次は、ボタンを作成していきます。

開くボタンをクリックすれば、ToViewControllerが開く。 というイメージです。

f:id:ikkitang1211:20160624001222p:plain

では、画面遷移を作成します。
controlボタンを押しながら、 開く をクリックして、 そのまま、 ドラッグして、ToViewControllerまでドラッグします。

f:id:ikkitang1211:20160624001737p:plain

このようなポップアップが出てくるので、 Show を選択します。

開くをクリックした時の遷移が作成出来ました。

f:id:ikkitang1211:20160624001814p:plain

戻る処理の作成

次は、 戻る処理を 作成していきます。

ここからが、 Unwind Segue の話です。

例によって、戻るボタンを作成します。

f:id:ikkitang1211:20160624002147p:plain

ここで、少し、コーディングします。

遷移元ViewControllerに 記述します。

※ ToViewController側に記述して、はまりました笑

f:id:ikkitang1211:20160624002601p:plain

@IBAction func returnToMe(segue: UIStoryboardSegue) { }

これだけです。
また、このメソッド名、 returnTome() とかじゃなくても何でもいいです。 引数と @IBAction の指定だけすればいいみたいです。

次に、戻るを押した時と、このreturnToMe() function を結びつけます。

Main.storyboard を開いて、ToViewController側を表示します。

戻る ボタンを control ボタンを押しながらクリックして、 ドラッグして、 ToViewControllerの上部の一番右にある Exit のアイコンに結びつけます。

f:id:ikkitang1211:20160624003016p:plain

また、ポップアップが出てくるので、 ここには、先ほど定義したメソッド名が表示されています。 先ほど定義した、 returnToMe() メソッドを指定します。

以上で、チェック完了です。

動作確認すると、以下の様な感じです。

動作チェック

初回起動時、ViewController が開きます。 開くをクリックします。 f:id:ikkitang1211:20160624003223p:plain

ToViewController が show segue で表示されました。 戻るボタンで戻ってみます。 f:id:ikkitang1211:20160624003235p:plain

スクリーンショットだとあまり説得力はありませんが、ちゃんと戻れました。 f:id:ikkitang1211:20160624003416p:plain

github のソースにあげています。

今回のソースを Github にあげてます。

[TakahashiIkki/CloseSegueSample @github]

ViewController を閉じる他の方法

NavigationControllerを使う方法は、まあ置いておくとして、他にあるんだろうか?

そもそも、

self.dismissViewControllerAnimated(true, completion: nil) 

なんで動かなかったんだろう?

Qiita読む限りは遷移先で呼ぶメソッドっぽいしなー。

って事でまだまだ、 Swifter には程遠いです。

。。。ってか、ブログなっがーー。。

書くので疲れた。

小言 (生意気野郎)

思う事

今回のバグは自分が想定出来なかったため、起こりました。  
次回からは、更に、注意深く考え、同じミスを起こさないよう
気を付けます。

この報告書、何か意味あるのかな。。。

免責事項

また、しょうこりもなく、会社の人に見つかったら、怒られそうな事を書きます。
拡散しないでね。。(´・ω・`)

ミスは必ず起こるもの

どんだけ、注意深くしても、絶対、ミスは起こると思います。

「前、メールしたあの件、来週なんですけど、どうなりました?」とかで、「申し訳ありません。メールの返信すっかり忘れてました。何もできてません。 次回からは、見逃さないように気を付けます。」

とか言っても、気を付けるだけなら、絶対、見逃すし、それぐらいなら、「チッ、ウッセーナ、反省してまーす」と何にも変わらないと思う。

「次回から、どういう工夫をして、ミスを減らしていくか」

ここが薄かったら、絶対、ミスが出ると思っています。

自分は、このメールのチェック・返信ミスを減らすために、メールが来た瞬間に案件別のメールBoxに入れて、その後、タスクの管理ツール Trello にTODO登録・納期登録をするようにしました。

毎日、朝来て、TODOのチェックを行ってから、仕事に入るように。

メールをチェックした後、Trelloに登録して、朝来てTrelloのチェックをするのでも、5分もかかってないです。

それだけで、納期前のバタバタのストレスと、お客さん・営業さんに迷惑を掛けるのが減らせるなら、お釣りが来てるんじゃないかな。と思っています。

でも、これでも、ミスは発生しました。

ボールがどっちにあるか分からなくて、確認・意思疎通にずれが生じて、「あれ、これやっておいてくださいって言いましたよね。」とかが当日発覚するようなミスです。

今は、「ここまで終わってます」とか進捗を正確に報告するし、向こうから進捗完了が無ければ、納品一週間前などに、確認メールを送る、というようなまあ、向こうからしてみれば、鬱陶しい仕事スタイルになってしまいました。笑

今の所、大きなミスは減ってきてて、良い事かなと。焦らず、仕事したいですよね。

もっと具体的に

ここ数週間。

会社で大きなミスを起こした人がいて、「すみませんでした。~を忘れてました」とか、「~の注意不足でした」とかって、全社メールをよく目にします。

まあ、全社メールに具体的な対策を書いても「お、おう」ってなるのかもしれないけれども、

「その『すみません』何回、言ってるの」ってなってしまう。

すみません。4年目のペーペーなのに。。

バグが出て、それをデバッグ今度気を付けます、って言っても、そりゃ、いつかは絶対、検証漏れを起こすと思うし。。

長い目でみて、小さな部分から、自動テストに変更していくとか。

もしくは、テスターの人員を増やすとか。 (この辺は人員・工数と相談だけど・・・)

なんか、あんまり変わってる気がしないなーーー。。。

PDCA回したりしないのかな。

。。。もうちょっと、年取って、おじさん力つけたいね!

すみません。生意気野郎の小言でした。

第四回岡山Swiftもくもく会 終了レポート by @ikkitang

プログラミング Android iOS Java Swift もくもく会 okandroid okios okswift

第四回岡山Swiftもくもく会

f:id:ikkitang1211:20160619234327p:plain

今回は最近流行りの? 技術だらけのもくもく会でした。

岡山Androidもくもく会 & 岡山Swiftもくもく会 & 岡山WindowsPhoneもくもく会 & 岡山Arduino探検会 という・・笑

全員で7名の方に参加いただいて、充実したもくもく会でした!

お約束

#okandroid #okios #岡山アプリ開発もくもく会 #今日の進捗今日の進捗が上がりました。

今回も進捗を上げました。
そして・・祝、しんのすけの全ラーメンを制覇しました。

支那そば
支那そば塩
・ 和風そば

やっぱ、支那そばが美味しいねー。 支那そば塩も捨てがたいよ。

今回の内容

今回は学生さんが二人もいらっしゃてました!

18歳とかの子も来られてまして、「AndroidってJavaで書くんですね!」 とかそういう驚きが新鮮でした。

えぇ、Javaで書きます\(^o^)/ お互い、これからも頑張りましょう。

さて、今回は、参加者の方が、Arduinoの体験会を開催してくださいまして、皆、そこで楽しんでました。

#arduino #okios #岡山アプリ開発もくもく会神龍呼べそう。

こういう奴? Arduinoでエルチカと呼ばれる LEDライトをチカチカさせたり、音を鳴らしたりやってました。

#arduino #エルチカ #岡山アプリ開発もくもく会 #okandroid #okios LEDをフェイドイン・フェイドアウトさせてます!

楽しかったです。ありがとうございました。

もくもく会でハンズオンとかもいいですね。

早く、自分のアプリリリースして、ハンズオンとか開催したいよ。僕は\(^o^)/ まだまだ、初心者なもんで。。

自分の進捗

さて、今回ですが、自分のiOSアプリの進捗については、進捗特になかったですかねー。

取り敢えず、まとめるとこんな感じでした!

登録画面・編集画面を一個のUIViewで持ってたのですが、そこに登録のボタンとかも一緒に作ってました。

ただ、ボタン押した時にUIAlertControllerを使ったりとか、登録後、登録画面のViewを閉じて、前の画面に戻るとか。

こういうのってやっぱり、設計的によく無いらしい。

UIViewControllerがあって、その下にUIViewがあるみたいな画面のつくりなので、UIViewから親のUIViewControllerを色々操作する、っていう設計は本来すべきで無いらしい。

まあ、ごもっともなので、カスタムのUIViewの中から、ボタンだけ、取り除いて、各ViewController上に置きました。

まあ、そんな所でした。

次回予定

2016/07/24 (日) に行います!

岡山Androidもくもく会 & 岡山Swiftもくもく会 を統合した名前にしました。

一応、意図としては、岡山Swiftもくもく会 。。。 Swift ってiOSアプリを作りたい初心者の方に伝わるのかなー、って。

iOSアプリを作るプログラム言語の名前をSwiftである、って知ってるのかなー?と見つめなおした結果です。

だって。。。今回、okswift側の応募者、僕一人だけだったんだもの。。。。泣

って事で! 次回もぜひよろしくお願いします。