3

私は、iPadにあるメール アプリに似た (ただし正確にはていない) ものを作ろうとしています。

具体的には、タブベースのアプリを作成したいのですが、各タブはユーザーに異なる UISplitViewを提示します。

各 UISplitView には、Master ビューと Detail ビューが含まれています (当然のことです)。

各 UISplitView で、 Master を、新しい UIViewControllers がスタックにプッシュ (またはスタックからポップ) されるマルチレベルのナビゲーション コントローラーにしたいと考えています。UISplitView 内のこのタイプのナビゲーションは、アプリケーションがネイティブの電子メール アプリに似ている場所です。

私の知る限り、まともな「uitabbarcontroller内のsplitviewcontroller」を説明している唯一の場所はここです: TabBarのUISplitViewController ( UITabBarController )? そして、私は受け入れられた答えに従おうとしました。

受け入れられた解決策は私にとってはうまくいくようです (つまり、異なる UISplitView を切り替えることができるタブバー コントローラーを取得します)。

問題は、UISplitView の左側をマルチレベル ナビゲーション コントローラーにする方法がわからないことです。

これは、最初の「タブバーコントローラーの「内側」の分割ビュー」を作成するためにアプリデリゲート内で使用したコードです(前述のリンクで提案されているものとほぼ同じです)。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    NSMutableArray *tabArray = [NSMutableArray array];

    NSMutableArray *array = [NSMutableArray array];
    UISplitViewController *splitViewController = [[UISplitViewController alloc] init];
    MainViewController *viewCont = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
    [array addObject:viewCont];
    [viewCont release];
    viewCont = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
    [array addObject:viewCont];
    [viewCont release];
    [splitViewController setViewControllers:array];
    [tabArray addObject:splitViewController];
    [splitViewController release];



    array = [NSMutableArray array];
    splitViewController = [[UISplitViewController alloc] init];
    viewCont = [[Master2 alloc] initWithNibName:@"Master2" bundle:nil];
    [array addObject:viewCont];
    [viewCont release];
    viewCont = [[Slave2 alloc] initWithNibName:@"Slave2" bundle:nil];
    [array addObject:viewCont];
    [viewCont release];
    [splitViewController setViewControllers:array];
    [tabArray addObject:splitViewController];
    [splitViewController release];

        // Add the tab bar controller's current view as a subview of the window
    [tabBarController setViewControllers:tabArray];

    [window addSubview:tabBarController.view];
    [window makeKeyAndVisible];

    return YES;
}

クラスMainViewControllerは、次のメソッドを含む UIViewController です。

- (IBAction)push_me:(id)sender {
    M2 *m2 = [[[M2 alloc] initWithNibName:@"M2" bundle:nil] autorelease];
    [self.navigationController pushViewController:m2 animated:YES];
}

このメソッドは (インターフェース ビルダーを介して) MainViewController.xib 内にある UIButton にアタッチされますUIButton が押されたとき。それでも、ボタンが押されても何もしません(メソッドが呼び出されたことはわかりますが)。

どこが間違っているのか考えていますか?

ティア!

4

2 に答える 2

0

(マルチレベル) マスター ナビゲーション コントローラーのサブクラスを作成し、次のメソッドをオーバーライドします。

- separateSecondaryViewControllerForSplitViewController:

オーバーライドされたメソッド内でスーパー クラス メソッドを実行し、返されたビュー コントローラーをそこから分割するかどうかを確認します。そうでない場合は、collapse メソッドを呼び出して再マージします。

- collapseSecondaryViewController:forSplitViewController:

Swift でのテンプレートの例:

import UIKit

class MasterNavigationController: UINavigationController {

    override func separateSecondaryViewControllerForSplitViewController(splitViewController: UISplitViewController) -> UIViewController? {

        // Separate a view controller from master navigation controller
        if let secondaryViewController = super.separateSecondaryViewControllerForSplitViewController(splitViewController) {

            if /* Check if secondaryViewController is your Detail View Controller (you can check for its class or restorationIdentifier for example) */ {

                return secondaryViewController

            } else {

                // Remerges the separated view controller back to the master navigation controller
                super.collapseSecondaryViewController(secondaryViewController, forSplitViewController: splitViewController)
            }
        }
        return nil
    }
}
于 2016-03-16T01:58:34.980 に答える
0

MainViewController が UINavigationController のサブクラスであることは確かですか?

コントローラーをプッシュ/ポップできるようにする場合は、mainViewController を navigationController (またはサブクラス) にする必要があります。次に、コントローラー (TableViewControllers など) をプッシュします。この構造は、デフォルトの splitView プロジェクトで確認できます (IB を開いてビューを調べます)。

UISplitViewController に関するまともなチュートリアルは次のとおりです: http://mobiforge.com/developing/story/developing-split-view-based-apps-ipad

于 2010-05-21T11:47:33.457 に答える