【发布时间】:2011-09-25 11:13:25
【问题描述】:
我有一个有多个级别的项目。 我找不到合适的开始方式。项目模型在 层次结构(树状结构)。 它有近10个级别。那么如何在多个中实现这些级别 一个操作可以打开特定表视图的表视图? 我是否必须为所有级别创建不同的视图?或者我可以 只需在 plist 文件 (xml) 中写入我的视图的数据结构并使用 该文件适用于所有级别。 请建议我如何开始。 谢谢
【问题讨论】:
标签: iphone ios cocoa-touch xcode4
我有一个有多个级别的项目。 我找不到合适的开始方式。项目模型在 层次结构(树状结构)。 它有近10个级别。那么如何在多个中实现这些级别 一个操作可以打开特定表视图的表视图? 我是否必须为所有级别创建不同的视图?或者我可以 只需在 plist 文件 (xml) 中写入我的视图的数据结构并使用 该文件适用于所有级别。 请建议我如何开始。 谢谢
【问题讨论】:
标签: iphone ios cocoa-touch xcode4
如果每个级别都需要用户交互并且有大量信息要显示给用户,那么你应该使用嵌套的 UITableViews,点击一个行会导致下一个。例如,您可以查看设置应用程序。
是的,您必须为每个级别创建一个视图。然而,从用户体验的角度来看,10 个关卡似乎有点过多(你能想象一个现有的应用程序有 10 个关卡吗?)。您应该考虑通过将几个级别组合在一起来扁平化您的树。
【讨论】:
使用 XCode 中基于 CoreData 的“基于导航的应用程序”。
创建一个与自身具有一对多关系的实体(例如 TreeData),称为“孩子”。在其上创建一个反向关系(一对一),称为“父级”。
在委托中的 tableView:didSelectRowAtIndexPath: 上,您需要检查“TreeData”中是否设置了“children”,如果是这样,那么您需要推送您当前所在的 TableViewController 的新实例,并将所选项目上的子项作为数据源。
这将允许您继续遍历。
plist 是给出总体思路并使某些东西发挥作用的最简单方法。
您也可以使用 plist 实现相同的目的。
类似这样的:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Tree Root</key>
<array>
<dict>
<key>title</key>
<string>Google (No Children)</string>
<key>url</key>
<string>www.google.com</string>
</dict>
<dict>
<key>title</key>
<string>List of Web Sites</string>
<key>children</key>
<array>
<dict>
<key>title</key>
<string>digg</string>
<key>url</key>
<string>digg.com</string>
</dict>
<dict>
<key>title</key>
<string>iGoogle</string>
<key>url</key>
<string>www.google.com/ig</string>
</dict>
<dict>
<key>title</key>
<string>Stack Overflow</string>
<key>url</key>
<string>www.stackoverflow.com</string>
</dict>
</array>
</dict>
</array>
</dict>
</plist>
http://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TableView_iPhone/
【讨论】: