Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 640 - Zoomania 9

NavigationControllerを「Embed in」してもちゃんとTableViewを表示できました。

次はCellを選択して編集のための画面に遷移させる方法を実装していく手順を説明していくところですが気が変わりました。

このZoomania、私のオリジナルアプリのアイディアに似ているので、チュートリアルに時間をかけて悩むよりオリジナルアプリ作成に力を入れることにします。

したがってZoomaniaプロジェクトも続けますが、私が悩んだところを絞って書きます。

TableViewを埋め込んだViewControllerから編集用のEditViewControllerに遷移させるセグエを作ります。セグエのidentifierを「Edit」にすればアクションメソッドに「prepareForSegue()」メソッドを加えて、セグエからdestinationViewControllerを発動させて新しいViewController(EditViewController)に移ります。

しかし、TableViewCellの内容をEditViewControllerに持っていくのにどうすればいいのか悩みました(こういう所が素人です)。

TableViewの選択された行(row)を知るためにどうすればいいのか?

TableViewのデリゲートメソッドにちゃんと用意されていることがやっと理解できました。

tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {}

最初は、このメソッドを使いました。「viewDidLoad()」メソッドの実装をよくするので、「選択されたら発動」というのが理にかなっているのではないかと考えたわけです。しかし、これではprepaeForSegue()が実行されてから呼ばれるので、データを移動させることができません。このメソッド内で「performSegueWithIdentifier()」メソッドを使ったのですが、このメソッドでセグエ先のViewControllerをコントロールできません(^_^;)。

tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {}

ということで辿り着いたのがこっちのメソッドです。これでTableViewCellの内容を先に保持して、prepareForSegueがその後に呼ばれるので遷移先のViewControllerに値を手渡すことができました。

今日はこれだけ。