1

rootview から別のビューを detailView にロードする方法を考えていました。

   - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {

        if (indexPath.row == 0) {
            SecondViewController *svc = [[SecondViewController alloc] init];

            //[self.navigationController pushViewController:svc animated:YES]; 

        }


}
4

2 に答える 2

4

splitviewcontrollerは、ルート ビューと詳細ビューの 2 つのビューの配列があり、この配列のビューを変更できます。ビューを割り当てて初期化し、それをこれら 2 つのいずれかに置き換えると、このビューはsplitviewcontroller.

このコードを使用して、rootview のさまざまなセルにさまざまなビューをロードします。rootview のdidSelectRowAtIndexPathメソッドを次のように変更します。

- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    UIViewController  *localdetailViewController = nil;

    if (indexPath.row==0)
    {

    DetailViewController *detailView=[[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];

    localdetailViewController=detailView;

    detailView=nil;

    }

    if (indexPath.row==1)
    {

    SecondViewController *secondDetailView=[[SecondViewController alloc] initWithNibName:@"SecondDetailViewController" bundle:nil];

    localdetailViewController=secondDetailView;
    secondDetailView = nil;
    }

    UINavigationController *navController=[[UINavigationController alloc] init];

    [navController pushViewController:localdetailViewController animated:YES];

    YourSplitViewAppDelegate *delegate=[[UIApplication sharedApplication] delegate];

    NSArray *viewControllers=[[NSArray alloc] initWithObjects:[delegate.splitViewController.viewControllers objectAtIndex:0],navController,nil];

    delegate.splitViewController.viewControllers = viewControllers;

    [localdetailViewController release];

    [navController release];

    }
于 2012-08-18T08:47:06.883 に答える
0

私の解決策は、ユニバーサルアプリにXcode 7.1.1を使用し、ストーリーボード、自動レイアウト、およびサイズクラスを使用して、iOS 9用に構築しています...

Midhun MP回答のバージョンを使用しました...現在/元の(交換/新規/秒ではない)詳細ビューコントローラーのviewDidLoadメソッド内:

明らかに、最初にコントローラーの正しいヘッダー ファイルをインポートします。

#import "NEW_DetailViewController.h"

次にviewDidLoadメソッド内で:

- (void)viewDidLoad {
    [super viewDidLoad];

    <<OTHER_CODE>>

    if (<<INSERT_THE_LOGIC_YOU_NEED_TO_TRIGGER_THE_REPLACEMENT_DETAIL_VC>>) {
        NEW_DetailViewController *viewNewDetailVC = [[NEW_DetailViewController alloc] initWithNibName:@"NEW_DetailViewController" bundle:nil];

        UINavigationController *navController = [[UINavigationController alloc] init];
        [navController pushViewController:viewNewDetailVC animated:YES];

        NSArray *arraySplitViewControllers = [[NSArray alloc] initWithObjects:[self.splitViewController.viewControllers objectAtIndex:0],navController,nil];

        self.splitViewController.viewControllers = arraySplitViewControllers;
    }
}

: XIB ファイルをロードせずにこのコードを機能させることができました。[[UIViewController alloc] init]代わりにを使用して、交換用の詳細な VC 全体をコードで構築しまし[[NEW_DetailViewController alloc] initWithNibName:@"NEW_DetailViewController" bundle:nil]たが、XIB ファイルをロードできなかったことに不満を感じたため、永続化しました...

XIBファイルを分割ビューコントローラーの代替詳細ビューコントローラーとして正常にロードするというこの問題を解決しようとして、さまざまなSO回答から多くのバリエーションを試みました。

最後に、 Travis Mによるこの回答で、必要なヒントが得られました...

新しい XIB ファイルとUIViewController!

新しいファイルを作成し、UIViewController のサブクラスにします。スクリーンショットを参照してください:

新しい UIViewController の新しいサブクラスのスクリーンショット

重要「XIB ファイルも作成する」チェックボックスを必ずオンにしてください。

UIViewControllerビューの内容をコード化する場合を除き、 の新しいサブクラスを変更する必要はありません。ソリューションに a を追加するだけで済み、UILabelInterface Builder を使用してこれを行いました。

上記の例のように、交換用の View ControllerNEW_DetailViewControllerをコードで参照していることを確認してください。

それでおしまい!

XIB ファイルでは、次のようになります。

ファイル所有者 -> サブクラス: NEW_DetailViewController

ファイルの所有者 -> アウトレット:ビュー

表示 -> 参照アウトレット:ビュー

于 2015-11-16T14:02:31.033 に答える