2012-03-15 77 views
0

我试图创建一个通用的,可重用的视图,看起来像一个内衬的记事本。我决定处理问题的方式(在几次设计迭代之后)是创建一个由UITextViewUIView组成的自定义视图。我应该采用哪种设计方法来创建此自定义视图?

当用户滚动浏览文本行时,我想让UIView跟踪滚动方向。 这里的关键是:在我的自定义视图中,我需要更改一个子视图的位置以响应另一个子视图中的事件。东西需要协调这些变化...

现在,我想采取的一种方法是使用MVC设计模式。视图控制器可以处理所有事件并相应地移动子视图。这个MVC可以嵌入到其他MVC中。

通常,当使用MVC设计模式时,控制器将处理用户事件并操纵模型和视图。但是,我的自定义视图没有模型 - 我试图做的是让视图管理它自己的子视图,当用户做一些滚动操作时。在我看来,是MVC设计模式是不适合在这里有两个原因:

  1. 没有一个模型或逻辑特定于它在使用的程序
  2. 似乎对我来说,视图应该负责处理改变视图应该出现的用户事件。

...但我可能是错的,这就是我寻求帮助的原因。对于那些比我更有经验并且可能已经做过很多次的人来说,这个问题是:

在这种情况下什么类型的设计模式是合适的? MVC或...

+0

您可以购买预先制作的视图。这是一个付费实现:[DTNotePadViewController](http://www.cocoanetics.com/parts/dtnotepadviewcontroller/)。 – JoePasq 2012-03-15 04:24:57

+0

是的...这正是我想要做的。除此之外,我更感兴趣学习如何设计此人创建的自定义记事本视图。至于保存笔记等,我会为此创建一个视图控制器,但我在设计自定义内衬记录视图并定义它的行为方面有点失落。 – 2012-03-15 04:31:27

+0

我认为他的博客上有一些注释。不确定他私密或公开的内容。 – JoePasq 2012-03-15 04:35:12

回答

1

你想要一个视图来管理自己的子视图吗?那就这样做!那么如果这种模式没有TLA呢?

一个典型的方法是在您的容器视图中实现layoutSubviews。检查其当前状态或窗口中其他视图的状态(例如滚动视图的contentOffset),然后适当设置其子视图。 (调整它们大小,重新定位它们等)

只是尽量保持它的快速,因为它可能会频繁地调用layoutSubviews

+0

Kurt - 你能用'容器视图'来表达你的意思吗?我想我得到的是,你是否建议创建一个UIView子类,它只是管理我在'layoutSubviews'中添加的子视图?还有一个问题:将此容器视图设置为“UIScrollViewDelegate”是否不合理,以便在用户滚动时可以获得回调? ......感谢您的帮助 - 我基本上在寻找解决这个问题的常用方法,以免我重新发明轮子。 – 2012-03-15 20:33:36

+0

你有正确的想法,是的。你甚至可能甚至不需要使视图成为'UIScrollViewDelegate' - 滚动视图可能会通过'setNeedsLayout'使布局无效,这样你的视图的'layoutSubviews'就会自动被调用。 (如果没有,当需要时很容易调用'setNeedsLayout')。试试看。 – 2012-03-16 04:11:58

相关问题