将iPhone应用程序升级到通用,现在使用splitview

时间:2013-06-19 18:17:27

标签: iphone xcode ipad uisplitviewcontroller ios-universal-app

我有一个可以使用的iPhone应用程序。我现在想要将此应用程序升级到通用应用程序。考虑到这一点,我已经进行了更改,比如为iPad创建另一个MainWindow.xib,我已经开始工作了。我几乎让整个iPhone应用程序都适用于iPad。我需要采取的下一步是将我的活动日历转换为拆分视图。据我所知,我不需要改变我已经拥有的两个控制器中的任何逻辑(CalendarViewControllerCalendarDetailViewController)。

话虽这么说,让它们在splitview上工作的最佳方法是什么?是否可以让splitview使用这两个控制器(因为splitview默认有两个控制器,TableViewControllerViewController)?那么我是否需要创建另一个appDelegate或其他内容以将所有正确的信息传递回MainWindow.xib?或者我是否需要创建一个新的SplitViewController?如果是这样,我将如何组合我的两个日历控制器中的所有逻辑?

非常感谢任何帮助!!

2 个答案:

答案 0 :(得分:1)

假设您正在使用StoryBoard:将SplitViewController拖入iPad StoryBoard。还要确保您的两个所需UIViewControllers在那里。按住Control键并点击SplitViewController,然后将其拖到每个UIViewController,然后选择要设置的方式。

答案 1 :(得分:1)

我知道回答这个问题有点晚,但如果有人需要... 您不需要另一个appDelegate,您只需要检查(在appDelegate中)您的设备是否是iPad,然后使用MasterVC和DetailVC设置一个视图控制器数组。否则,您将在iPhone应用程序中设置rootViewController。

这将是类似的东西:

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

[...]

YourMasterVC *mvc =
[[YourMasterVC alloc] initWithStyle:UITableViewStylePlain];

UINavigationController *masterNav =
[[UINavigationController alloc] initWithRootViewController:mvc];

YourDetailVC *dvc = [[YourDetailVC alloc] init];
cvc.detailViewController = dvc;

if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) {

    // On iPad
    UINavigationController *detailNav =
    [[UINavigationController alloc] initWithRootViewController:dvc];

    UISplitViewController *svc = [[UISplitViewController alloc] init];

    svc.delegate = wvc;

    svc.viewControllers = @[masterNav, detailNav];

    self.window.rootViewController = svc;
} else {
    // On iPhone
    self.window.rootViewController = masterNav;
}

[...]

}