【问题标题】:iOS Master-Detail, how to use different detailViewControllers in iPadiOS Master-Detail,如何在 iPad 中使用不同的 detailViewControllers
【发布时间】:2014-12-31 21:07:07
【问题描述】:

我有一个 Master-Detail iOS 应用程序,由标准 XCode 模板和故事板构建而成。当用户单击 Master 的 UITableView 中的“设置”项时,我需要在大多数项目上显示一个带有浏览器的视图,以及一个设置表单(使用 FXForms)。

我在 iPhone 中找到了一种方法,但在 iPad 中找不到。在 iPhone 故事板中,我创建了另一个视图控制器,并从 Master 到新的视图控制器进行了另一个 segue 连接。然后我在didSelectRowAtIndexPath中执行以下操作

if(indexPath.section == 0 && indexPath.row == 2) // settings
    [self performSegueWithIdentifier:@"showSettings" sender:self];
else
    [self performSegueWithIdentifier:@"showDetail" sender:self];

当我点击设置时,设置视图就会出现。来回导航也可以。

然而,在 iPad 中,detailViewController 似乎一直都在,在 SplitViewController 的右侧。如何修改情节提要和/或代码以将默认视图切换到设置,然后再次切换回来?

我还发现 XCode 的默认模板为 iPad 故事板创建了“关系”序列,这是 iPhone 故事板中不存在的类型,并且不能像我在 iPhone 案例中那样命名为“showSettings”或“showDetail”。

【问题讨论】:

  • 您可以选择为两者使用相同的故事板吗?您根本不想要 SplitView,还是只是想替换 SplitView 而不是 SplitView 的一部分?
  • XCode 在标准的 Master-Detail 示例中为 iPhone 和 iPad 创建了两个不同的故事板。我看不到 iPhone 共享相同故事板的方法,因为 iPhone 中的 Master-Detail 就像从一个全屏视图切换到另一个,而 iPad 使用类似“侧边栏”的 Master。在 iPad 的情况下,我想找到一种方法来替换 SplitView 的一部分。
  • 使用 XCode 6,您可以在 iPhone 和 iPad 上使用单个 Storyboard,如果您以 iOS8 为目标,您甚至可以在 iPhone 和 iPad 上使用 UISplitViewController。
  • @SachinPalewar - 如果 UISplitViewController 用于 iPhone,它可能不再是 Master-Detail。我将通过替换 detailViewController 进行更多测试,并在问题中提供解决方案。谢谢。
  • 我还在swiftwala.com/multiple-detail-views做了一个Multiple-Detail样本你可以去看看。

标签: ipad uitableview uistoryboard uisplitviewcontroller uistoryboardsegue


【解决方案1】:

从 cmets 到原来的帖子我发现:

  1. 如果我以 iOS 8 为目标,我可以为 iPhone 和 iPad 使用相同的故事板,然后我可以使用“替换”转场(现在称为“显示细节”转场)切换到另一个细节视图。非常方便,但 iOS 7 尚不支持。

  2. 对于 iOS 7,我可以使用 segues 来支持 iPhone,而对于 iPad,我必须做类似的事情(如果我使用整洁的库来显示带有选项的视图,则为 FXForms)。

所以我的 iPad 代码(在 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 中用于特定行)。我确实备份了 self.splitViewController.viewControllers 的当前 lastObject 以恢复 Master 中表视图的其他行。

FXFormViewController *controller = [[FXFormViewController alloc] init];
IBSettingsForm *settingsForm = [[IBSettingsForm alloc] init];
settingsForm.fontSize = 12;
controller.formController.form = settingsForm;

// this is created so that my new view would have a navigation bar    
UINavigationController *navigationController  = [[UINavigationController alloc] init];
[navigationController pushViewController:controller animated:false];

self.splitViewController.viewControllers = [NSArray arrayWithObjects:[self.splitViewController.viewControllers objectAtIndex:0],
    navigationController, nil];

【讨论】:

    猜你喜欢
    • 2013-01-07
    • 2015-11-11
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2014-03-27
    • 2021-09-08
    相关资源
    最近更新 更多