将 UIView 或 UIViewController 用于计时器对象?
Posted
技术标签:
【中文标题】将 UIView 或 UIViewController 用于计时器对象?【英文标题】:To use a UIView or UIViewController for timer object? 【发布时间】:2015-04-11 19:56:43 【问题描述】:我有一个包含多个元素的 UI,其中一些我想封装到它们自己的对象中。例如,一个对象将是一个计时器(基本上只是一个位于 UIView 中的 UILabel),其中包含外部可用的成员:
startTime
(财产)
start
和 pause
(方法)
(还有一个im_done
NSNotification 当计时器达到0。)这个对象和其他几个对象将在一个UIViewController 中一起使用。
UIView 或 UIViewController 是否更适合作为计时器对象(以及所有其他对象)的子类?阅读this answer 让我相信 UIView,但对于我的具体情况(尤其是对于更复杂的对象),我不确定。感谢阅读。
编辑:澄清一下,我希望所有实现定时器功能的代码都与我的主视图控制器分开。一个重要的原因是计时器对象是可移植的。
【问题讨论】:
我建议继承 UIView 而不是 UIViewController。 @Sean 感谢您的评论。只是为了确保我理解,您是否建议将我的计时器的所有内部工作(NSTimer 对象等)放在这个 UIView 子类中? 【参考方案1】:你应该有一个UIView
的子类,但它应该只有视图组件来显示你需要的任何时间信息。您还应该有一个 MyTimer
类,它封装了计时功能并提供更改的回调(例如剩余时间以及当剩余时间达到零时可能单独完成)。理想情况下,回调传递MyTimer
,并且为方便起见,传递剩余时间值,因此您无需在简单用例中使用访问器方法。
现在,您已经有一个视图控制器来管理更广泛的视图,它可以创建将您的 UIView
子类添加到主视图,并创建、拥有和管理驱动这些视图的关联 MyTimer
实例。
【讨论】:
感谢您的回复。这是否意味着MyTimer
类本质上是一个视图控制器?
不,不是视图控制器,只是一个控制器(具有分配职责的普通对象)。它没有视图的概念,它只是管理时间
好的,那么负责更改计时器 UILabel 的代码将保留在我的主视图控制器中吗?
您可以选择是否将其放入 MyTimer
提供的回调中,因此它直接更新视图子类中的标签,或者回调传递值(或只是整个 @ 987654328@ 实例,作为视图模型)到视图,以便它可以自我更新。两者都是完全有效的方法。所以会更新一个中间视图模型类,虽然这可能是矫枉过正....【参考方案2】:
我认为这归结为偏好。您将在父视图控制器中包含不同的 uiview 和 uiviewcontroller,如果您不了解容器,这种差异可能会使 uiviewcontroller 更加困难。我想说最好的做法是在 uiviewcontroller 中,但这真的取决于你。
【讨论】:
以上是关于将 UIView 或 UIViewController 用于计时器对象?的主要内容,如果未能解决你的问题,请参考以下文章