【问题标题】:Reusing Storyboard UI for a UIViewController subclass depending on user roles根据用户角色为 UIViewController 子类重用 Storyboard UI
【发布时间】:2014-06-16 05:39:20
【问题描述】:

假设我正在构建一个类似 Twitter 的社交网络,并尝试构建一个 ProfileViewController 来显示用户信息。首先,我将创建一个名为 ProfileViewController 的类,并将其连接到 Storyboard 中的 UITableViewController

现在,我想根据哪个用户正在查看哪个配置文件来自定义 ProfileViewController。如果我正在查看自己的个人资料,我可以有一个“编辑”按钮,而如果其他人正在查看我的个人资料,它将有一个“关注”按钮。但是基本模板是一样的,它仍然需要显示常见的东西,比如最新的帖子。

我可以这样做的一些方法:

  1. 使用相同的ProfileViewController 类。例如,我可以在 Storyboard 上有多个 ProfileViewControllers 实例,并使用它们的每个 restorationId 来区分用户点击“个人资料”时调用的 ProfileViewController 与用户访问其他人时调用的 ProfileViewController个人资料。

  2. 为每个目的创建不同版本的ProfileViewController。我可以创建一个类MyProfileViewController 专门用于处理我自己的个人资料,并创建一个类UserProfileViewController 来处理其他用户的个人资料。

我不确定最佳做法是什么。有人可以帮忙吗?

【问题讨论】:

  • 我认为这取决于您在两种情况下有多少差异。如果只有一个按钮,您可以使用一个视图控制器来完成,只需更改按钮的标题和操作。即使显示的内容存在差异,如果 UI 相同,那么您仍然可以只使用该控制器的一个实例。

标签: ios objective-c ios7 subclass uistoryboard


【解决方案1】:

虽然您具体询问的是 Storyboard 场景和 ViewController,但问题更笼统地表述为:

'我应该有一个类,它有逻辑以两种不同的方式行动,给定一些状态确定变量,还是两个不同的类?'

拥有一个类的动机是因为大部分逻辑是共享的,并且您不想重复代码(和错误)。这是一个很好的动机。

拥有两个类的理由是你摆脱了 if/else 代码,这可以通过降低复杂性和使类更明确地定义它们的确切目的来减少错误。这也是一个很好的动力。

幸运的是,您可以两全其美。有三个班级。

  • 第一个类 A 将实现两种情况共有的所有逻辑。在您的情况下,这将具有除“我的个人资料”视图的“编辑”按钮之外的所有逻辑,并且可能类似于“其他个人资料”视图的“添加朋友”按钮。

  • 第二个类 B 和第三个类 C 将分别实现“编辑按钮”和“添加好友按钮”的逻辑,并且还将第一个类用于通用逻辑。您可以与第一个类的关系是从类 A 继承,或委托给类 A 的实例。在这种情况下,通常最好使用派生,您可以确保所有基类功能与两个子类同等相关,并且您不介意在公共界面中公开派生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-29
    • 2021-09-17
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多