2012-04-15 104 views
0

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

但是,在我的应用程序的其他地方,我现在想modally显示一个简单的选择器来选择其中一个实体。我认为实现这个最好的方法是建立一个协议来处理可以发送消息给我的代表关于用户是否取消或选择实体等的选择器...

由于这么多的编码将是同样,我的问题是:是否有可能/或以任何方式建议启用UITableViewController作为协议?

即当正常显示时,它的行为与当前(UIViewController的标准子类)一样,但是也可以通过代理以模态方式呈现并将消息传递给委托?

对最佳实践的看法很敏感吗?

回答

1

你甚至不需要一个正式的协议。从其他控制器实例化时,只需给你的UITableViewController一个@property (nonatomic, assign) id delegate即可。将其设置为代表。使用id不要将您的课程紧密结合,也不要保留该代表。

在调用控制器中执行didCancelPicking...:(id)senderdidPick...:(id)sender item:(id)pickedItem的两种方法。

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

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

这些都是我可以从帽子顶部思考的最佳实践。

关于你在这里的特定代码重用:你必须决定你的代码是否太乱,当你重用那个UITableViewController并想改变它在模态显示时的行为。例如。您以后可能想要防止在这种情况下进行编辑和挖掘。您当然可以将其封装在if (self.delegate)支票中,但是...