如何在另一个视图中更改按钮上的图像

时间:2010-02-05 15:57:28

标签: iphone image button

当按钮位于另一个视图中时,如何更改按钮显示的图像。

2 个答案:

答案 0 :(得分:1)

NSNotificationCenter是在不引入依赖关系的情况下在视图之间进行通信的良好机制。 KVO也可以很好地运作,具体取决于你正在做什么。

答案 1 :(得分:1)

不确定我是否完全理解了这个问题,但是您通过将信息存储在数据模型中来传递视图控制器及其视图之间的信息。

假设您有两个视图A和B.每个视图都有一个视图控制器Ac和Bc。假设您想根据用户在A中设置的某些设置来设置B中按钮的图像。例如,根据用户是否在视图A中选择女性男性,视图B中按钮的背景将是蓝色或粉红色。 (......不,我想不出更好的例子,起诉我。)

该信息属于数据模型的范围,因为B中的按钮将改变其背景的真正原因是由于用户选择创建的一些数据。数据模型应与任何视图控制器位于单独的对象中。它可以是从简单数组到完整核心数据图的任何东西。它应该被设计成使得它对任何接口都一无所知。

数据模型对象需要停放在控制器可以访问它的某个位置。快速而肮脏的方法是将数据模型对象驻留在应用程序委托中。最好的方法是为它创建一个单例。

这里的关键概念是视图A和视图B不必知道对方的存在。他们各自的视图控制器Ac和Bc也不必彼此了解。每个视图控制器只是独立地将数据写入/读取到数据模型。

假设您的应用收集了一个人的数据,如年龄,性别,身高,体重等,然后根据数据为用户提供了一些选择。假设视图A收集数据,视图B显示数据。流程将如下:

  1. 用户在视图A的UI中更改控件。
  2. Controller Ac从其视图A。
  3. 中读取这些更改,例如用户的性别
  4. Controller Ac调用数据模型并将信息从A写入其中。
  5. Controller Ac关闭其视图并将控制权交给其他控制器。
  6. 任何事情都可能发生。包括应用程序退出和启动(如果数据模型保存到持久存储。)
  7. 在某些时候,需要查看B.控制器Bc,访问数据模型并从中读取数据。然后它在Bc中填充/设置UI以匹配该数据。根据存储在数据模型中的用户的性别,它将按钮的图像设置为蓝色或粉红色。
  8. 信息流程为A - > Ac - dataModel - > Bc - > B.

    这是所有信息在iPhone使用的模型 - 视图 - 控制器设计模式中的界面元素之间传递的方式。关键的想法是控制器只需要了解dataModel而不需要知道其他内容。应用程序状态的每次更改都反映了数据模型的变化。

    (Dang,在写答案之前,我必须停止喝太多咖啡。)