【问题标题】:To use a UIView or UIViewController for timer object?将 UIView 或 UIViewController 用于计时器对象?
【发布时间】:2015-04-11 19:56:43
【问题描述】:

我有一个包含多个元素的 UI,其中一些我想封装到它们自己的对象中。例如,一个对象将是一个计时器(基本上只是一个位于 UIView 中的 UILabel),其中包含外部可用的成员:

  • startTime(财产)
  • startpause(方法)

(还有一个im_done NSNotification 当计时器达到0。)这个对象和其他几个对象将在一个UIViewController 中一起使用。

UIView 或 UIViewController 是否更适合作为计时器对象(以及所有其他对象)的子类?阅读this answer 让我相信 UIView,但对于我的具体情况(尤其是对于更复杂的对象),我不确定。感谢阅读。

编辑:澄清一下,我希望所有实现定时器功能的代码都与我的主视图控制器分开。一个重要的原因是计时器对象是可移植的。

【问题讨论】:

  • 我建议继承 UIView 而不是 UIViewController。
  • @Sean 感谢您的评论。只是为了确保我理解,您是否建议将我的计时器的所有内部工作(NSTimer 对象等)放在这个 UIView 子类中?

标签: ios uiview uiviewcontroller


【解决方案1】:

你应该有一个UIView 的子类,但它应该只有视图组件来显示你需要的任何时间信息。您还应该有一个 MyTimer 类,它封装了计时功能并提供更改的回调(例如剩余时间以及当剩余时间达到零时可能单独完成)。理想情况下,回调传递MyTimer,并且为方便起见,传递剩余时间值,因此您无需在简单用例中使用访问器方法。

现在,您已经有一个视图控制器来管理更广泛的视图,它可以创建将您的 UIView 子类添加到主视图,并创建、拥有和管理驱动这些视图的关联 MyTimer 实例。

【讨论】:

  • 感谢您的回复。这是否意味着MyTimer 类本质上是一个视图控制器?
  • 不,不是视图控制器,只是一个控制器(具有分配职责的普通对象)。它没有视图的概念,它只是管理时间
  • 好的,那么负责更改计时器 UILabel 的代码将保留在我的主视图控制器中吗?
  • 您可以选择是否将其放入 MyTimer 提供的回调中,因此它直接更新视图子类中的标签,或者回调传递值(或只是整个 @ 987654328@ 实例,作为视图模型)到视图,以便它可以自我更新。两者都是完全有效的方法。所以会更新一个中间视图模型类,虽然这可能是矫枉过正....
【解决方案2】:

我认为这归结为偏好。您将在父视图控制器中包含不同的 uiview 和 uiviewcontroller,如果您不了解容器,这种差异可能会使 uiviewcontroller 更加困难。我想说最好的做法是在 uiviewcontroller 中,但这真的取决于你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 2013-07-04
    • 1970-01-01
    • 2012-05-23
    • 2023-04-10
    • 2013-11-04
    • 1970-01-01
    相关资源
    最近更新 更多