这是一个MVC最佳实践问题。我会解释我的设计然后你们可以告诉我它听起来是否正确。
我有一个视图,显示类似于iBooks的PDF文本数据,名为TextView.h。它有一个UIScrollView,它使用分页来允许读者浏览页面。
我认为加载和分解文本到页面的所有逻辑都应该由模型类完成。 因此,对于最佳实践,我认为我创建了一个模型类并让它负责 1)打开pdf 2)有一个公共界面,视图控制器可以使用它来根据自己想要的页面查询文本数据
我有一个TextViewController.h,它是TextView.h的委托。 TextViewController将负责 1)加载文本视图 2)查询模型并使用结果填充视图。 e.g。
UILabel *label = [model getTextForPage:1];
[myView addPage:label];
3)为textViewController提供一个委托方法,该方法在用户每次在视图中翻页时触发。即视图控制器将监听视图的didEndDecelerating方法。发生这种情况时,viewController可以抓取新页面的文本并将其传递给视图,例如
UILabel *label = [model getTextForPage:x];
[myView addPage:label];
如果所有这些听起来都是正确的,请告诉我。谢谢!
答案 0 :(得分:2)
首先,您的陈述:
我认为加载和分解文本到页面的所有逻辑都应该由模型类
完成
不正确,因为模型只保存值,所有对数据执行的处理都应该在MVC模式的控制器中完成。
例如,如果要添加两个数字,则必须保留模型中的值,在控制器中执行添加过程,并在视图中显示结果。
如果您需要将文本分解为页面,那么该逻辑应该在控制器中完成。
在iOS中,控制器和视图被组合到视图控制器中,因此无需创建另一个视图。在您的示例中,您可以创建视图并处理视图控制器中的逻辑,这很好,但是您无法像在getTextForPage
中那样处理模型中的数据。相反,将此逻辑移动到视图控制器中的方法,而不是返回文本,然后将此文本加载到视图标签中。此方法可以从模型对象中获取所需的详细信息。
总之,模型保存数据,创建页面的过程在视图控制器中完成,结果将加载到您创建的视图中。
有关iOS中MVC的更多详细信息,请参阅以下链接,这些链接可以帮助您:
http://blog.teamtreehouse.com/ios-design-patterns-model-view-controller-part-3
答案 1 :(得分:1)
模型 - 只需拥有值。 查看 - 您可以在屏幕上看到的一切。 控制器 - 控制您希望View运行的方式
在你的情况下,
TextView.h是您的查看。涵盖所有显示和scrollView&寻呼强>
所有剩余的逻辑加载和分解文本到页面,打开pdf ,查询基于页面的文本数据, 加载文字视图位于TextViewController.h下,即控制器
您在这些页面中显示的数据是模型。