今回も引き続きUITableViewControllerのサンプルコード触ってみた。
コレね。
画面遷移・Segueについて
サンプルコードでは、一覧ベージから詳細ページへの画面遷移が実装されています。
正直、今までココらへんの画面遷移周り全く調べてなかった・・・。
次の画面へのデータの受け渡しとか、画面からの戻りをハンドリングしたりとかできるのかなーってレベル。まあできるよね。
んで、調べてみた感じSegueというのがあるらしい!
Segueが具体的に何かはまず置いといて、これを使えば画面遷移できるみたい。
Segueで画面遷移する前には、prepareForSegueメソッドが呼ばれるので、ここで遷移先のViewControllerをインスタンス化して画面に渡したいデータとかも一緒に突っ込んであげればいいっぽい。
こんな感じ!identifierは、Segueにつける識別子っぽくて、これでどの画面遷移のAction?なのか識別できる。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "showDetail" { if let indexPath = self.tableView.indexPathForSelectedRow() { let object = objects[indexPath.row] as! NSDate (segue.destinationViewController as! DetailViewController).detailItem = object } } }
以下の記事を読むと理解しやすかった。Xcode 6からSegueも色々変わってるみたい。
公式のドキュメントにはSegue Typesがまとまってるからこっちも見るとよさそう。
AndroidのIntentに慣れてると、ここは全然違うなーという印象。
willSelectRowAtIndexPath / didSelectRowAtIndexPathについて
TableViewのCellを選択した際に実行するメソッドってないのかなーと探してたらそれっぽいのがあった。
それが willSelectRowAtIndexPathとdidSelectRowAtIndexPathっぽい。
どうやらUITableViewDelegateのメソッドっぽい。とりあえずUITableViewDelegateのReference貼っておく。
ドキュメントに色々わかりやすく説明が書いてあるので、そこ読むのオススメ。
willSelectRowAtIndexPathは、タッチした際にその行選択を有効/無効に判別したりする直前の処理。nilとかを返すと、行の選択が無効になったことになるっぽい。
didSelectRowAtIndexPathは、実際に選択された後の処理って感じですね。
使い道として、willSelectRowAtIndexPathは特定行だけ選択を無効にするとか。didSelectRowAtIndexPathは選択したらダイアログを出したり色々できそう!
cellForRowAtIndexPathについて
UITableViewControllerのサンプルコードを見てて、Cellの数が多くて画面内に収まらない場合ってどうなるのかなー?って思った。
ちょっと調べた感じcellForRowAtIndexPathメソッドがそこら辺関係してそう。
んで、この記事がとても役立った!この記事ありがたい!
上の記事でも書いてあるように、cellForRowAtIndexPathメソッドは
テーブルの行を表示する必要が生じるたびに cellForRowAtIndexPathメソッドを呼び出します。
ってことらしい。なるほど。
ちなみに、サンプルコードだとこんな感じで実装してる。毎回UITableViewCellを作成して返してます。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { // 「cellForRowAtIndexPath:」で指定したインデックスパスのセル(UITableViewCell)を作成し,そのインスタンスを返す let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell let object = objects[indexPath.row] as! NSDate cell.textLabel!.text = object.description return cell }
んじゃ、AndroidみたいにViewのリサイクルってできないの?ってところがまだ疑問に残ってること。
Viewのリサイクルについては、iOSエンジニアに聞いてみるほうが早そうだ。
Xcode Key bind
なんかXcode使いにくいなー!って思ってたら、Key bind覚えてなかった。。。
とりあえず ctrl + .で入力補完覚えたから無敵!
こことか見たけど、もっとまとまってそうなの探そー。
気になったけどわかってないこと
- プロジェクトの.gitignoreってどうするのがベストなんだろー??
- PlaygroundでNSCalendar使ったんだけど表示が出ない・・・
まとめ
ちょっとずつXcodeにも慣れてきた。
まだ特定の操作を繰り返しやってるだけだが、これの積み重ねで覚えていくしかないっすよね。
Android勉強した時もそうだったけど、とにかく反復練習してOutputしまくる。
ちなみに、新しいiPod touchを発表当日に買いに行きました。銀座のApple Store行って。
青の32G買った。Xcode 7 bateで実機実行した時の感動はすごかった。
よし、これからも頑張る!