1

我为我的应用程序构建了一个 UITableViewController,它与我的核心数据模型交互。它的主要目的是被推送到导航控制器上并显示实体列表,并允许我编辑/选择和深入了解它们等信息......

但是,在我的应用程序的其他地方,我现在想以模态方式显示一个简单的选择器来选择这些实体之一。我认为实现这一点的最佳方法是构建一个协议来处理选择器,该选择器可以向我的代表发送有关用户是否取消或选择实体等的消息......

由于大部分编码都是相同的,我的问题是:是否有可能/或以任何方式将 UITableViewController 作为协议启用?

即,当正常显示时,它的行为与当前一样(UIViewController 的标准子类),但随后也能够由委托以模态方式呈现并将消息传递给委托?

热衷于她对最佳实践的看法?

4

1 回答 1

1

你甚至不需要正式的协议。@property (nonatomic, assign) id delegate从另一个控制器实例化它时,只需给你的 UITableViewController 一个。将其设置为委托。用于id不要将你的类耦合得太紧,也不要保留委托。

在调用控制器中didCancelPicking...:(id)sender实现两个方法。didPick...:(id)sender item:(id)pickedItem

现在,当以模态方式查看 UITableViewController 时,您需要做两件事。提供一个取消按钮 + 对此作出反应 ( didCancelPicking...) 并可能修改tableView:didSelectRowAtIndexPath:以发送didPick...给代表。始终使用 和 测试委托,respondsToSelector:以防万一performSelector:withObject:。始终将发送者作为这些委托方法中的第一个参数。

此外,始终在调用类中显示和隐藏模态控制器。例如,不要让它从 UINavigationController 中移除。

这些是我能想到的最佳实践。

关于此处的特定代码重用:当您重用该 UITableViewController 并希望更改其在模态显示时的行为方式时,您必须确定您的代码是否过于混乱。例如,您以后可能希望在这种情况下阻止编辑和向下钻取。您当然可以始终将其封装在if (self.delegate)支票中,但是...

于 2012-04-15T08:35:48.143 回答