1

我有一个显示“报纸”(模型)实例详细信息的屏幕。我的屏幕的 ViewController 有这个 Newspaper 模型的一个属性。一个 Newspaper 实例包含多个 Article 实例,这些 Article 实例必须在屏幕中表示为 UIButtons。点击 UIButton 必须显示包含文章标题的警报消息。

将 UIButton 与 Article 模型相关联的一些好方法是什么?基本上,当点击 UIButton 时,如何检索 UIButton 对应的 Article 实例?

我目前有两种方法:

  1. 覆盖 UIButton,并为 Article 实例添加一个属性。
    • 这违反了 MVC 模型,因为视图 ​​(UIButton) 具有与模型 (Article) 的直接通信方式,但这将简化按钮操作,因为 UIButton 可以简单地调用其属性来知道将使用哪个 Article 实例来执行操作(显示包含文章标题的警报消息)。
  2. 创建一个 UIButton 的 NSArray (buttonsArray) 和一个 Article 实例的 NSArray (articlesArray)。
    • buttonArray 的索引 0 对应articlesArray 的索引 0。与点击的 UIButton 关联的 Article 实例将基于按钮在数组中的位置。为了检索一个UIButton对应的Article,必须循环buttonsArray直到找到被点击的UIButton,然后使用相同的索引从articlesArray中获取Article。

有没有更好的方法来实现这一目标?

编辑:按钮将具有动画和手势识别器。此外,来自文章模型的按钮操作所需的信息不仅包括标题(例如文章位置,或者对象本身,如果它将被传递到另一个屏幕等)。

4

4 回答 4

1

您可以使用第二种方法,但使用 NSDictionary 而不是两个数组。

或者您可以使用第一种方法,但不是为您的文章实例添加属性,而是添加一个通用字符串属性,如“additionalTitle”或某事。这样您就不会在按钮类和模型类之间创建直接依赖关系。然后,您可以在此属性中保存警报视图的标题。

于 2012-10-23T07:51:39.567 回答
0

UIButton 有一个可设置的标签属性,它是一个整数。tag 属性可以很容易地与数组中的索引匹配。因此,在接收到触摸事件时,您取出标签值,您就知道哪篇文章被点击了。

于 2012-10-23T11:19:06.283 回答
0

感觉苹果在iOS中普遍采用的方式更像是模型——(视图+控制器)的结合。例如UIViewControllerUITableViewController是视图和控制器作为单个实体连接在一起的示例。考虑到这一点,将模型值存储为UIButton子类的一部分不会违反 MVC,只要它只是充当模型和视图之间的值传递。它可能不是一个完美的 MVC,但这是开发人员必须决定是否遵循这种方式的事情。因此,我建议第一种方法,因为它看起来很整洁,并确保了可读性和可维护性。

于 2012-10-23T07:57:42.650 回答
0

难道你不想UITableView在集成了 UIButton 的单元格中使用吗?

因为如果您采用这种方法,您可以使用第二种方法。使用存储所有文章的数组并获取表格单元格的点击索引以从数组中加载文章。您可以创建一个包含 UIButton 的 CustomCell。按钮甚至不必知道他下面是哪篇文章。它是使用单击的索引处理它的表格视图。

如果您不想使用 aUITableView 我会选择第二种方法。

于 2012-10-23T07:49:40.673 回答