2

ユーザーがマスタービュー内のセルを選択しUITableViewControllerたときに、の詳細ビューとして特定のものを読み込もうとしています。UISplitViewControllerしかし、いくつかの問題があります。セルを選択すると、テーブルビューコントローラーのない空白のウィンドウが表示されます。

ただし、App Delegateを変更して、UITableViewコントローラーを使用せずにコントローラーをロードするように変更するUISplitViewControllerと、正常に機能するため、コーディング方法に問題があることがわかります。UISplitViewController.

ビュー階層:

UISplitViewController 
--> 
    UINavigationController 
    --> UITableViewController (DetailViewController)

    UINavigationController
    --> UIViewController (ColorViewController)

ユーザーがセルを選択するColorViewControllerと、セルが変更されます。DetailViewController.

AppDelegate.m

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

{

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

self.viewController = [[ViewController alloc] init];

self.window.rootViewController = [self.viewController splitViewController];

[self.window makeKeyAndVisible];

return YES;

}

ViewController.m

- (UIViewController *) splitViewController {

// Create the navigation-run root view
ColorViewController *rootVC = [ColorViewController controller];

UINavigationController *rootNav = [[UINavigationController alloc] initWithRootViewController:rootVC];

// Create the navigation-run detail view
DetailViewController *detailVC = [DetailViewController controller];

UINavigationController *detailNav = [[UINavigationController alloc] initWithRootViewController:detailVC];

// Add both to the split view controller
svc = [[UISplitViewController alloc] init];

svc.viewControllers = [NSArray arrayWithObjects: rootNav, detailNav, nil];

svc.delegate = detailVC;

return svc;

}

ColorViewController.m

@interface ColorViewController : UITableViewController

...    

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

UIViewController *controller = (UIViewController *)self.splitViewController.delegate;

TableViewController *tvc = [[TableViewController alloc] init];

[controller.view addSubview:tvc.view];

}

内の詳細ビューを変更するための最良の方法は何UISplitViewControllerですか?上記のように置換ビューを追加するUIViewController必要がありますか、それともより良い方法がありますか?多分それが私の問題の原因ですか?

4

2 に答える 2

0

分割ビューの詳細側を処理するナビゲーションコントローラーがあるため、それを使用して新しいテーブルビューコントローラーをプッシュする戦略を立てる必要があります。これを行ったとき、プッシュ操作にどちらか一方を使用できるように、アプリデリゲートのプロパティとして両方のナビゲーションコントローラーへの参照を保持しました。

クラスの本当の目的はわかりViewControllerませんが、そのsplitViewControllerメソッドをアプリデリゲートに移動すると、ナビゲーションコントローラーをローカル変数からプロパティに簡単にアクセスできる場所に変更する方が簡単です。

于 2012-11-27T12:31:50.930 に答える
0

私は自分の質問に答えるつもりです。

何らかの理由で、マスタービュー(ColorViewController)で、詳細オブジェクトTableViewController *tvcをメソッド内の変数としてではなく、インスタンス変数として宣言する必要があります。

その後、動作し、テーブルが正しく表示されます。

でも、誰かが説明しようと思ったら、その理由はよくわかりません。

乾杯、

于 2012-11-27T12:45:33.093 に答える