やりたいことはすぐできるようにしたいっぽい。ぽいぽい。
##xcode5 ios7で全画面表示する
1.プロジェクトファイルのTARGETSのinfoタブからCustom iOS TargetPropertiesを開き、
view controller-based status bar appearance キーにNOを設定
RAWプロパティとしては以下。
UIViewControllerBasedStatusBarAppearance
2.プロジェクトファイルのTARGETSのGeneralタブからDeployment Infoを開き、
Hide during application launchのチェックマークをONに設定
これで没入も快適。
3.ストーリーボード上のルートビューコントローラのAttributeインスペクタでStatus Bar
とTop Bar
をNone
に設定
##ナビゲーションバーは表示したくないが、pushセグエの動作は使いたい
ストーリーボードでナビゲーションコントローラを配置すると、まあなぜかテーブルビューコントローラもセットで付いてくる(テンプレだから仕方ないかもしれないが、ウザい)。しかしそれは削除して、ただのビューコントローラを遷移先に差し替えてもそれは全く問題ない。
なので、ナビゲーションバーを表示したくない場合でも、pushセグエを使いたければ、ここは黙してナビゲーションコントローラを使うのが良い。
で、邪魔なナビゲーションバーを(非表示に)消してしまえば良い。ナンダッテー
これはストーリーボード上のナビゲーションビューコントローラのAttributeインスペクタでStatus Bar
とTop Bar
をNone
に設定すれば良いだけで簡単。
で、スワイプジェスチャとpushセグエ、Unwindセグエを結びつける。Unwindもそのまま使える。わざわざカスタムセグエを作ったりする必要も無く、某ニュースアプリみたいな動きができる、とてもナイスな感じで。
##ストーリーボードを、AppDelegateのコードでAddする
作成したストーリーボードは、コードで読み込んで生成することができる。生成するにはstoryboardWithName:bundleメソッドを使う。Nameについては、ストーリーボードのファイル名(.storyboardを含まない)を指定すれば良い(bundleの指定が必要なのは、通常とファイルの位置が違う場合。通常はnilでOK)
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UIStoryboard *sb =
[UIStoryboard storyboardWithName:@"StoryboardName" bundle:nil];
//ストーリーボードに設定されたイニシャルビューコントローラを取り出す。
UIViewController *vc =
[sb instantiateInitialViewController];
//rootViewControllerをwindowに設定
self.window.rootViewController = vc;
//windowを表示
[self.window makeKeyAndVisible];
return YES;
}
分割した複数のストーリーボードをマージして使いたいときや、ストーリーボードを場合で使い分けたい等の場合、状況に応じたコードでストーリーボードを生成する。その際ビューコントローラも一緒に生成されるので、それを取り出してナビゲーションコントローラやタブビューコントローラ等にaddChildViewControllerしてやればよい。また、状況に応じて、生成するものを変えるとハッピー。
##UIPageViewControllerで、ページコントロールを表示する
Page-Based Applicationのテンプレートを使い、ModelContorllerに以下のコードを追加する。(UIPageViewControllerDataSourceプロトコルのデリゲートメソッド2つ)
たったこれだけで、iOSのアプリ選択画面のように、ページ遷移とページコントロールのドットが表示されるようになる。ナンダッテー
- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController
{
return [self.pageData count];
}
- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController
{
return 0;
}