假设我正在构建一个像 Twitter 这样的社交网络,并尝试构建一个 ProfileViewController
来显示用户信息。首先,我将创建一个名为 ProfileViewController
的类,并将其连接到 Storyboard 中的 UITableViewController
。
现在,我想根据哪个用户正在查看哪个个人资料来自定义 ProfileViewController
。如果我正在查看自己的个人资料,我可能有一个“编辑”按钮,而如果其他人正在查看我的个人资料,则可能有一个“关注”按钮。但是基本模板是相同的,它仍然需要显示常见的内容,例如最新帖子。
我可以做到这一点的一些方法:
使用相同的
ProfileViewController
类。例如,我可以在 Storyboard 上有多个ProfileViewControllers
实例,并使用每个restorationId
来区分用户点击“个人资料”时调用的 ProfileViewController 与ProfileViewController
当用户访问其他人的个人资料时被调用。为每个目的创建不同版本的
ProfileViewController
。我可以专门创建一个类MyProfileViewController
来处理我自己的个人资料,并创建一个类UserProfileViewController
来处理其他用户的个人资料。
我不确定最佳实践是什么。有人可以帮忙吗?
最佳答案
尽管您具体询问的是 Storyboard 场景和 ViewController,但问题更笼统地表述为:
“我应该有一个类,它具有以两种不同方式运行的逻辑,给定一些状态确定变量,还是两个不同的类?”
拥有一个类的动机是因为大部分逻辑是共享的,并且您不想重复代码(和错误)。这是一个很好的动力。
拥有两个类的理由是您可以摆脱 if/else 代码,这可以通过降低复杂性并使类针对其确切目的进行更好的定义来减少错误。这也是一个很好的动力。
幸运的是,您可以两全其美。上三堂课。
第一个类 A 将实现两种情况下共有的所有逻辑。在您的情况下,这将具有除“我的个人资料” View 的“编辑”按钮之外的所有逻辑,也许还包括“其他个人资料” View 的“添加 friend ”按钮。
第二个类 B 和第三个类 C 将分别实现“编辑按钮”和“添加 friend 按钮”的逻辑,并且还利用第一个类来实现通用逻辑。您与第一个类的关系可以是从类 A 继承,也可以委托(delegate)给类 A 的实例。在这种情况下,使用派生通常是最好的,这样您可以确保所有基类功能与两个子类同等相关,并且您不介意在公共(public)界面中公开其推导。
关于ios - 根据用户角色重用 UIViewController 子类的 Storyboard UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23378971/