构建数据驱动的 UI

Posted

技术标签:

【中文标题】构建数据驱动的 UI【英文标题】:Building a data driven UI 【发布时间】:2011-08-24 15:17:08 【问题描述】:

我在整个 SO 中搜索了有关 iPhone 的这个主题,所有内容都指向 WWDC 2010 的报道,所以是的,我知道这一点。但是谁能给我指出一个更详细的资源,我可以从中学习如何构建一个强大的系统,根据我呈现的数据在应用程序上呈现不同的用户界面?我正在以 JSON 格式获取数据,我的 UI 需要根据我从 JSON 解析器中得到的内容而有所不同。

有任何书籍或在线资源可以详细了解该主题吗?

谢谢!

【问题讨论】:

【参考方案1】:

我最近在我的一个应用程序(导航样式)中遇到了同样的问题,我解决它的方法相当简单。

我的 JSON 响应中有一个 user_type 标志,根据该标志我会推送不同的视图控制器。

例如,假设我的 JSON 响应存储在名为“response”的 NSMutableDictionary 中

if ([response objectForKey:@"account_type"] == 1) 
  /*
    initialize user_type 1 viewController
  */
    [self.navigationController pushViewController:userType1ViewController animated:YES];
else if ([response objectForKey:@"account_type"] == 2) 
  /*
    initialize user_type 2 viewController
  */
    [self.navigationController pushViewController:userType2ViewController animated:YES];

您可以拥有任意数量的不同 user_types。

在 cmets 中澄清后编辑

您可能会手动绘制这些视图。

我将为您列出的每个不同问题类型(包括常见元素的属性,如问题标题、选项等)子类化 UIView。假设具有相同问题类型的问题将具有相同的布局。

然后,您可以循环浏览您的 JSON 响应(一旦它位于数组或字典中)并将其布局。

如果是多项选择题,请创建一个新的 multipleChoiceQuestion 视图,添加其属性,然后将 Subview 添加到主提要视图。然后,对于下一个视图,您需要将框架设置为:

nextQuestion.frame = CGRectMake(0, 0 + firstQuestion.frame.size.height, height, width);

这将确保您的第二个问题位于第一个问题的正下方。

【讨论】:

感谢您的回复。但我的需求有点复杂。就数据量而言,我在任何时候都不知道对响应的期望。我已经决定使用 textViews 来回答问题。我设置了 UISliders 的评级量表。多选项问答即将到来,我有 UITableViews/UIPickerViews。但是只有当我解析响应时,我才会知道每个有多少。如何相应地布局我的视图? 我清楚了吗?如果我不是这样的话。我可能会在任何类型的回复中收到任意数量的问答项目(多项选择、评分量表、简单问答)。在解析完成之前我不会知道。只有这样我才能知道要设置多少个文本视图、滑块和表格或选择器。这不是基于简单决策加载固定的不同视图控制器的问题。它更多地是关于根据响应在视图控制器上布置不同的子视图。我可能需要为每种类型设置 1 个,或者只需要 1 个文本视图,或者我可能需要 10 个文本视图、5 个滑块和 3 个表格。明白了吗? 编辑了我的回复。让我知道这是否有帮助。你对 UIView 的子类化和在 drawRect 中手动绘制东西感到满意吗? 整洁。让我试一试,然后我会在完成后接受答案:) +1 以获得巨大帮助。谢谢。我认为解决方案也很相似,但只是想知道是否存在任何其他可靠的方法来更有效地完成工作。干杯!

以上是关于构建数据驱动的 UI的主要内容,如果未能解决你的问题,请参考以下文章

UI自动化框架,数据驱动 vs 关键字驱动怎么选

数据驱动 vs 关键字驱动:对搭建UI自动化测试框架的探索

通常如何构建数据驱动的应用程序

UI 自动化测试框架:PO 模式+数据驱动

数据驱动框架 - Selenium Webdriver

构建应用驱动的智能存储平台