2010-02-05 75 views
-1

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

+0

需要更多的细节/代码示例。 – 2010-02-05 16:12:25

+0

我试图编辑这个,但我不确定我是否理解这个问题。你问在当前没有显示的视图中如何更改按钮的图像?或者你想在另一个视图中根据某个动作或事件更改图像吗? – TechZen 2010-02-05 21:46:16

回答

1

NSNotificationCenter是一种很好的视图间通信机制,不需要引入依赖关系。 KVO也可能工作得很好,具体取决于你在做什么。

1

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

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

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

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

这里的关键概念是视图A和视图B不必知道对方的存在。他们各自的视图控制器Ac和Bc也不必知道彼此。每个视图控制器只是独立地将数据写入/读取到数据模型。假设你的应用收集某个人的数据,如年龄,性别,身高,体重等,然后根据数据为用户提供一些选择。假设视图A收集数据并且视图B显示它。的流动将是这样的:

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

信息流转A→Ac→dataModel→Bc→B。

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

(荡,我必须停止写作答案之前喝这么多咖啡。)

相关问题