objective-c - 如何将自定义模式对话框设计为常规 View Controller ?

标签 objective-c ios cocoa-touch

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

系统模态 Controller API (presentModalViewController:animated:) 在这方面非常有限,例如它坚持将 Controller 隐藏在模态 Controller 下并强制您使用预定义的动画控制它们。

Controller 包含 API 看起来很有前途,因为它允许同时在屏幕上显示多个 View ,每个 View 由不同的 Controller 管理。 (这正是常规 View Controller 顶部的模态对话框的情况。)但是与标准容器 Controller (如 UINavigationController)的相互作用是不稳定的,as I have found out .

有没有人有可行的技术可以将非全屏模式对话框保留为常规 View Controller 并让它们与 UI 的其余部分很好地配合使用?

最佳答案

如果您绝对希望它成为一个 View Controller ,您将不得不使用 iOS 5 中引入的 containment api,听起来好像您已经在玩弄它了。我完全同意你的看法 - 它有点不稳定,因此我通常会选择不同的方法。

我创建了一个 Controller ,它是 NSObject 的子类,并将其作为一个对象添加到 interfacebuilder 中。然后我将 Controller 设置为同时具有容器和 contentView。我创建了一个将 containerView 作为参数的初始化方法,并在该方法中执行我通常在 viewWillAppear 中执行的操作。初始化方法,我从 View Controller 调用,它负责将 containerView 交给模态 Controller 。

一旦初始化,模态 Controller 就负责它的容器和内容 View 。一旦模态 Controller 应该关闭,它就会简单地将它们从它们的 super View 中删除。

这是我在 iPad 应用程序中从主视图 Controller 调用的方法。从不相关的东西中提取:)

- (IBAction)showAddProduct:(UIButton *)sender {
  UIView *containterForAddProduct = self.darken;
  containterForAddProduct.alpha = 0;
  [self.view addSubview:containterForAddProduct];
  [self.addEditProductController beginAddingProductInContainerView:containterForAddProduct andManagedObjectContext:self.gridController.managedObjectContext];
}

关于objective-c - 如何将自定义模式对话框设计为常规 View Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10513854/

相关文章:

ios - 我如何知道用户是否点击了按钮?

iOS:如何在现有的 UINavigationController 中打开另一个 UINavigationController?

objective-c - 如何打印出方法名称和行号并有条件地禁用 NSLog?

iphone - UITableView 对象索引

objective-c - objective-c : Displaying Unicode characters

iphone - Cocoa-Touch:如何设置 UIImageView 使用的插值质量?

ios - 如何为空白区域设置 UITableView 背景?

ios - 从主线程访问布局引擎后,不得从后台线程执行对布局引擎的修改

ios - SWIFT:更新现有的核心数据对象

ios - 为什么我需要在为对象属性赋值之前分配/初始化一个类的实例?