【问题标题】:iOS MVC Is this a view or a controller?iOS MVC 这是视图还是控制器?
【发布时间】:2012-06-01 13:05:37
【问题描述】:

我在这里使用简单的英语。我有这个很棒的应用程序,有多个选项卡,每个选项卡(UIViewController 的子类)都有内容。其中一个选项卡内部有一个按钮(除其他外),并且具有很多功能。 该按钮很漂亮(我在网上找到的 UIGlossyButton 的子类)并显示了一个麦克风 如果您按下按钮,它(选项卡)会记录您的声音并自动停止(通过检测音量/超时)

  • 录制时,选项卡控制器在按钮顶部显示一个 LED 仪表
  • 录制后,按钮被替换为显示扬声器的 anthor 按钮
  • 点按扬声器会播放您的声音
  • 在扬声器上滑动可让您“删除”并重置回麦克风

这个“小工具”很棒,我很喜欢。现在我想把这个东西放在其他选项卡中,以及整个应用程序中的其他东西。这看起来像是抽象而不是复制/粘贴的候选。

让我感到沮丧的是:我应该将所有这些功能(显示/隐藏/交换按钮、录制声音、分析声级的逻辑)打包到一个小部件中吗?如果是这样,我应该使用多少个类以及每个子类应该使用哪些类?最后,在 Interface Builder 中,我应该将哪个对象拖到选项卡内的情节提要上,以及我应该在“自定义类”框中键入哪些类。

【问题讨论】:

    标签: iphone ios model-view-controller interface-builder


    【解决方案1】:

    对于单个 UIView 子类来说,这听起来好像很多。我绝对会把它分成一系列的类,或者至少在扩展的 UIGlossyButton 和关联的 UIViewController 之间。

    按钮的职责应该是:能够绘制自己,知道它何时被按下,并在对其采取操作时执行最少的逻辑(例如向 UIViewController 发送消息)。

    将按钮本身视为 MVC 的视图。然后,控制器将真正知道要为 UI 操作背后的所有智能做什么。然后像声音计或语音文件之类的东西,可以选择地表示为模型对象/类。有时我发现在 iOS 中创建显式模型类是多余的,所以我只使用具有多态性的普通 Cocoa 类(如 NSDictionary)来处理来自控制器的模型内容。

    【讨论】:

    • 听起来不错。那么在界面生成器中,我应该在情节提要上放置哪个对象来代表我的小部件?我不能使用视图控制器,因为我不能把它放在另一个视图中。按钮看起来有点奇怪,因为 IB 显示了所有这些参数,但我只使用标题而忽略了其他所有内容。
    • 这应该是:* RecordButtonController 子类 UIView 但作为 UIButton 放入 IB * RecordButtonView 子类 UIView 和 /has/ UIGlossyButton 和 LED 仪表 * RecordModel 子类 NSObject
    • UIButton 是 UIView 的子类,它还添加了与按钮相关的行为。听起来您的结构应该类似于:RecordButtonController:子类 UIViewController,具有 UIGlossyVutton 的 IBOutlet 属性,还具有引用 RecordButtonView RecordButtonView:子类 UIView 的属性,并且应该分配为 RecordButtonController 的“视图”。 RecordModel 子类 NSObject 这对我来说都是正确的。忘记所有您忽略的 IB 参数,如果您需要它们,它们就在那里。不使用它们没有坏处。
    • 最终结果如下:将所有 UI 功能添加到 UIGlossyButton 的子类中,该子类为 LED 设置子视图。创建了一个进行音频录制和处理的模型类。任何想要该功能的视图控制器都必须包含按钮,并实例化模型,然后使用 KVO 将两者连接起来。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 2012-06-02
    • 2012-08-03
    • 2011-05-22
    • 1970-01-01
    相关资源
    最近更新 更多