0

さて、私はマスター詳細アプリケーションです。ユーザーがセルをクリックすると、DetailViewControllerにWebページが読み込まれます。問題は、iPhoneバージョン(これはユニバーサルアプリです)では、セルをクリックしてから、MasterViewControllerに戻り、セルをもう一度クリックしてWebページをロードする必要があることです。私はこれを一度だけ行う必要があります、それはウェブページか何かを最初に始めるようなものだと思います。ただし、iPadバージョンでは、最初にロードします。元気?

これが私のapplicationDidFinishLaunchingAppDelegate.mファイルのコードです。ここでDetailViewControllerを初期化します。

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController_iPhone" bundle:nil];
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];
    self.window.rootViewController = self.navigationController;
    masterViewController.detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController_iPhone" bundle:nil];
} else {
    MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController_iPad" bundle:nil];
    UINavigationController *masterNavigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];

    DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController_iPad" bundle:nil];
    UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController];

    masterViewController.detailViewController = detailViewController;

    self.splitViewController = [[UISplitViewController alloc] init];
    self.splitViewController.delegate = detailViewController;
    self.splitViewController.viewControllers = @[masterNavigationController, detailNavigationController];

    self.window.rootViewController = self.splitViewController;
}

これがdidSelectCellAtIndexPathのコードです

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSDictionary *object = _objects[indexPath.row];
    NSURL *ex = [NSURL URLWithString:[object objectForKey:@"url"]];
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    self.detailViewController.detailItem = object;
        [self.detailViewController loadURL:ex];
        self.detailViewController.detailItem = object;
        [self.detailViewController loadURL:ex];
        [self.navigationController pushViewController:self.detailViewController animated:YES];
    } else {
        self.detailViewController.detailItem = object;
        [self.detailViewController loadURL:ex];
    }
}
4

1 に答える 1

1

iPadでは、スプリットビューコントローラーに2つのコントローラーがあるため、それらはインスタンス化され、アプリの起動時にビューが読み込まれます。iPhoneでは、その2番目のコントローラーがインスタンス化されますが、それを押すまでビューはロードされません。それが違いだと思います。マスターコントローラーのdidSelectRowAtIndexPathメソッドではなく、detailControllerメソッドloadURL:をviewDidAppearメソッドに移動してみてください。

于 2013-02-01T20:44:16.407 に答える