1

在自定义视图上向 UIButton 添加目标时,我有一个关于最佳实践的问题。目前,我在我的视图的加载方法中创建我的 UIButton,并将我的视图分配为按钮目标。我的观点是在按下按钮时处理逻辑,我突然想到这不是好的 MVC。

所以,我宁愿让我的控制器提供自己作为按钮的目标和动作,但是我不确定实现这一点的最佳方法。

视图可以使用对控制器的引用进行初始化,或者可以使用 UIResponder 的 nextresponder 获取控制器,并使用此引用设置目标。但是,这可能会导致循环保留,并且需要我的视图了解我的控制器上存在的方法,这比我希望的更紧密耦合。

或者,我可以为视图上的每个 uibutton 创建一个设置器。但是,如果我有多个按钮,或者包含带有按钮的自定义子视图的视图,这很快就会变得笨拙。我还可以为每个按钮创建属性,但这也很笨拙,并且允许控制器访问超出其需要的内容(它只需要设置目标,不需要能够获得对按钮的任何引用)。

最后,我可以为控制器中的所有按钮创建和添加目标,并在初始化时将其传递给视图,但这似乎也违反了 MVC 的角色。

似乎这是一种常见的情况,这些做法是否被认为是标准的,还是有更好的解决方案?

4

2 回答 2

0

我个人的看法是,在 Cocoa 中,允许自定义视图具有操作所需的逻辑和状态,但它们应该完全封装逻辑和状态。也就是说,您应该向子视图公开一个接口,而不是子视图本身。您应该通过委托和属性的组合以及自定义操作来公开任何私有属性或子视图。

话虽如此,鉴于您没有提供有关自定义视图目的的详细信息,因此很难提供有关最佳方法的详细信息。

于 2012-03-03T03:58:20.350 回答
-1

以拥有按钮的视图为目标是正确的。这样,如果您需要进行任何视图操作(启用/禁用、突出显示、弹出等),那么您来对地方了。此外,只有视图会知道按钮是什么,因此,在您的操作中,如果您想检查什么是sender,您可以执行此操作。但是让你的控制器知道每个单独的按钮似乎是对 MVC 的更严重的违反。

为您的按钮设置访问器并不是不合适的。在运行时提供参考会很方便。如果你不使用它,很难说保留一个额外的id. 至于将它们隐藏在私有接口中,这很好,但除非您发布您的 API 或与白痴一起工作,否则我不知道将访问器公开有什么危害。

您的视图对控制器具有引用是合适的,并且按钮操作可以像调用控制器的方法之一一样简单。这没什么大不了的,如果你想稍后再添加一些逻辑,这里有它的位置。

听起来你做得很好。

PS这是愚蠢的: 在此处输入图像描述

于 2012-03-03T03:55:23.683 回答