3

UISplitViewController (新しい iPad 3.2 SDK 内) に関する Apple のドキュメントによると、アプリのルート コントローラーとしてのみ使用することを意図しているようです。言い換えれば...明らかにUINavigationControllerが分割ビューを保持する必要があるため、UISplitViewControllerをUINavigationControllerにプッシュできないようです。

これが UISplitViewController の本当の制限であるかどうか、誰でも確認できますか? アプリで分割ビューを UINavigationController 階層のいくつかのレベルで使用したいと思っていましたが、方法がない限りそれを行うことができないようです。

ありがとうございました!

4

5 に答える 5

5

UISplitViewControllerをモーダルで表示しようとすると、アプリがクラッシュします。

于 2010-04-05T17:16:03.047 に答える
2

これは古い投稿ですが、別の方法で考えるのに役立つことがわかりました。これが問題の解決方法です。

splitViewControllerプログラムで作成しました 。次に、番号を付けて、現在のビューにサブビューとして追加しました。


FirstViewController* firstView = [[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease];    
SecondViewController* secondView = [[[SecondViewController alloc]  initWithNibName:@"SecondViewController" bundle:nil] autorelease];        
UISplitViewController* splitVC = [[UISplitViewController alloc] init];
[splitVC setDelegate:secondView];    
splitVC.viewControllers = [NSArray arrayWithObjects:firstView, secondView, nil];    
splitVC.view.tag = 99;    
[self.view addSubview:splitVC.view];

その後、splitViewが表示されますが、それを取り除くには、ビューから削除する必要があるため、の間に通知を作成しましたviewcontrollers。メインビューコントローラーにオブザーバーを追加しました。(注:メインのビューコントローラーは、splitViewControllerまたはそのビューの1つではなく、ロードするビューコントローラーですsplitViewController

NSNotificationCenter *splitViewObserver = [NSNotificationCenter defaultCenter];
[splitViewObserver addObserver:self selector:@selector(removeSplitView) name:@"removeSplitView" object:nil];

セレクター" removeSplitView"で、現在のビューのすべてのサブビューをforループに通し、タグ99のUIViewクラスオブジェクトを検索して、スーパービューから削除します。

NSArray *subviews = [self.view subviews];

for (int i = 0; i < [subviews count]; i++) {
    if ([[subviews objectAtIndex:i] isKindOfClass:[UIView class]]) {
        UIView *tempView = [subviews objectAtIndex:i];
        if (tempView.tag == 99) {
            [[subviews objectAtIndex:i] removeFromSuperview];
        }
    }
}

firstViewには、メインが監視しているという通知を投稿するdoneというメソッドがありViewControllerます。

-(IBAction) done:(id)sender {       
    [fileSelectedNotification postNotificationName:@"removeSplitView" object:self];    
}

fileSelectedNotificationまた、アプリのどこかに作成する必要があります。私はこれを介して行いviewDidLoadました。こんな感じです。

fileSelectedNotification = [NSNotificationCenter defaultCenter];

もちろんこれも追加しました

NSNotiicationCenter *filesSelectedNotification;

この.hファイルにviewController

したがって、完了ボタン(アプリのバーボタン)を押すと、splitViewControllerビューから削除されます。

正常に動作します。私はドキュメントを読んだだけでこれをすべて手に入れました。

于 2011-11-03T11:12:40.350 に答える
1

全くない。たとえば、階層のルートにタブ バー コントローラーを配置することができます。たとえば、各タブには分割ビュー コントローラーがあります。

分割ビュー コントローラーをタブ バー インターフェイスに後付けする方法についての私の投稿を参照してください: http://markivsblog.blogspot.com/2010/04/retrofitting-ipad-uisplitviewcontroller.html

于 2010-04-16T16:07:29.970 に答える
1

Apple HIG は、できないと言います。彼らはおそらくあなたがそれをするのをブロックしたことを意味します. 一部の開発者は独自の

于 2010-04-08T23:52:41.887 に答える
0

参考までに、これが進むべき道だと思います: See this similar question .

于 2013-11-14T16:35:37.457 に答える