2013/05/11

Storyboard + ScrollViewでハマる。

久々の更新です。
プライベートがバタバタしていたので、アプリ開発もブログ更新もほぼホッポリ出していましたが、主は生きてます。

生存確認はこのくらいにして、本題です。

storyboard便利ですね。
画面間のつながりまで、一気にGUI上で設定できて、とっても楽チンです。

そして、ScrollView便利ですね。
複数毎のViewControllerを横に並べて、ページングスクロールさせたりすると、いろいろ出来て少し幸せになります。
しかし、1点だけ不満な点があります。

storyboardとScrollViewの親和性がイマイチなトコロです。
具体的にはcontentSizeをstoryboard上で設定できないトコロ。

その他もいろいろありますが、大元を辿るとすべてココに集約する気がします。

さてさて、storyboard上でcontentSizeを指定できないということは、scrollViewを抱えているviewController側にコーディングが必要になるということです。
contentSizeの指定+各ページの追加処理です。

contentSizeの指定方法は簡単ですね。
scrollView.contentSize = CGSizeMake(320*3, 460);

あとは、ページ毎のviewController.viewをscrollViewにaddSubViewして完了です。
と、ちょっと待ってください。

あなたのそのviewControllerはどうやって生成しました?
Webに溢れた情報では、
 viewController = [HogeViewController alloc] initWithFrame:rect];
とかやっているところが多いのですが、これはアウトです。
実行してもscrollView内にHogeViewControllerの内容は表示されないでしょう。

理由は、storyboard上でレイアウトを決めているトコロにあります。
どうやら、storyboard上でレイアウトを設定したViewControllerはallocしてインスタンスを作っても、表示可能なviewが生成されていないようです。

では、どうやってインスタンスを引っ張ってくるか?

 viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"HogeViewControllerId"];


これでOK。
あとはframeプロパティで位置、サイズを指定し、addSubViewで追加して出来上がりである。