Skip to content

4 スプリットビュー(iPad)

この実装は必須ではありません。

スプリットビューは、一つの画面にお知らせ一覧画面とお知らせ詳細画面を並べるものです。
SDK では、UISplitViewController を継承したビューコントローラ PopinfoPadViewController を提供しており、iPad 時に活用できます。
画面イメージは以下のとおりです。

横画面表示時
左側にお知らせ一覧画面、右側にお知らせ詳細画面が配置されます。左側のお知らせ一覧画面の行をタップすると、連動して右側のお知らせ詳細画面の表示内容が変わります。(図4−1)

【図4-1】
4-1.png

縦画面表示時
お知らせ詳細画面が画面領域全体に表示されます。(図4−2)
ナビゲーションバーの「お知らせ一覧」ボタンをタップすると、お知らせ詳細画面の上に重なる形でお知らせ一覧画面が表示されます。(図4−3)

【図4-2】
4-2.png

【図4-3】
4-3.png

4.1 PopinfoPadViewController を使い、iPad に対応する

PopinfoPadViewController クラスの初期化には initWithNibName を用い、nib ファイルには nil を指定してください。
また、PopinfoViewConfiguration.m 内の「kIpadSplitViewUse」値を YES に変更していただく必要があります。
以下、実装例です。(PopinfoPadViewController に直接関連する部分のみ記述します。)

PopinfoPadViewController を生成します。ここでは、アプリ起動時に生成し、タブの3番目に配置する例です。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // PopinfoPadViewController を生成し、tabBarController の3番目のアイテムに配置する
    PopinfoPadViewController *padVC = [[PopinfoPadViewController alloc] initWithNibName:nil bundle:nil];
    padVC.tabBarItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:2];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, padVC, nil];

    // 以下省略
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // PopinfoPadViewController を生成し、tabBarController の3番目のアイテムに配置する
    let padVC = PopinfoPadViewController(nibName: nil, bundle:nil)
    padVC.tabBarItem = UITabBarItem(tabBarSystemItem: .favorites, tag: 2)
    self.tabBarController.viewControllers = [viewController1, viewController2, padVC]
}

プッシュ通知受信時における PopinfoPadViewController の動作を実装します。 PopinfoPadViewController が配置されているタブを選択し、表示を更新します。

- (void)popinfoReceiver:(PopinfoReceiver *)pr didReceivePopinfoMessage:(NSInteger)messageId popup(NSString *)popup
{
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
        // iPad時の処理
        // PopinfoPadViewController のタブを選択する
        PopinfoPadViewController *padVC = [self.tabBarController.viewControllers objectAtIndex:2];
        self.tabBarController.selectedViewController = padVC;

        // メッセージIDを設定し、表示を更新する
        padVC.messageId = messageId;
        [padVC.detailVC reloadMyViews];

    } else {
        // iPhone時の処理
    }
}
func popinfoReceiver(_ popinfoReceiver: PopinfoReceiver, didReceivePopinfoMessage messageId: Int, popup: String, payload: [AnyHashable : Any]) {
    if UIDevice.current.userInterfaceIdiom == .pad {
        // iPad時の処理
        // PopinfoPadViewController のタブを選択する
        let padVC = self.tabBarController.viewControllers[2]
        self.tabBarController.selectedViewController = padVC

        // メッセージIDを設定し、表示を更新する
        padVC.messageId = messageId
        padVC.detailVC.reloadMyViews()
    } else {
        // iPhone時の処理
    }
}