1

我经常需要一个不填满整个屏幕的自定义模式对话框,例如 iOS SDK 附带的操作表。这个对话框必须处理一些棘手的场景和条件,例如界面旋转,并且还经常携带大量代码来处理用户选择。因此,将对话框构建为常规视图+控制器组合并使其像 UI 中的一等公民一样工作似乎是非常可取的。

presentModalViewController:animated:系统模态控制器 API(

控制器包含 API 看起来很有前途,因为它允许同时在屏幕上显示多个视图,每个视图由不同的控制器管理。(这正是常规视图控制器顶部的模态对话框的情况。)但是正如我发现的那样UINavigationController,与标准容器控制器(如 )的相互作用是不稳定的。

有没有人有一种可行的技术可以将非全屏模式对话框保持为常规视图控制器并让它们与 UI 的其余部分很好地配合?

4

1 回答 1

0

如果你绝对希望它成为一个视图控制器,你将不得不使用 iOS 5 中引入的容器 api,这听起来好像你已经在玩弄了。我完全同意你的看法——这有点棘手,因此我通常会选择不同的方法。

我创建了一个子类 NSObject 的控制器,并将其作为对象添加到 interfacebuilder 中。然后我将控制器设置为同时具有容器和内容视图。我创建了一个将 containerView 作为参数的初始化方法,并在该方法中执行我通常在 viewWillAppear 中所做的事情。初始化方法,我从视图控制器调用,负责将containerView交给模态控制器。

一旦初始化,模态控制器就负责它的容器和内容视图。一旦模态控制器应该关闭,它就会简单地将它们从他们的超级视图中删除。

这是我从 iPad 应用程序中的主视图控制器调用的方法。无关内容的摘要:)

- (IBAction)showAddProduct:(UIButton *)sender {
  UIView *containterForAddProduct = self.darken;
  containterForAddProduct.alpha = 0;
  [self.view addSubview:containterForAddProduct];
  [self.addEditProductController beginAddingProductInContainerView:containterForAddProduct andManagedObjectContext:self.gridController.managedObjectContext];
}
于 2012-05-09T10:17:58.890 回答