将 UIView 或 UIViewController 用于计时器对象?

Posted

技术标签:

【中文标题】将 UIView 或 UIViewController 用于计时器对象?【英文标题】:To use a UIView or UIViewController for timer object? 【发布时间】: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 子类中? 【参考方案1】:

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

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

【讨论】:

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

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

【讨论】:

以上是关于将 UIView 或 UIViewController 用于计时器对象?的主要内容,如果未能解决你的问题,请参考以下文章

UIView无法改变尺寸大小怎么办?总是XIB建立的代码。

如何将 IBOutlet 标记为可用于特定 iOS 版本

将uiview分配或替换给其他uiview

子视图与子视图控制器 z 位置

存在方式通知何时将呈现自定义 UIView 或 removeFromSuperview()?

将 UIView 或 UIViewController 用于计时器对象?