2010-11-22 49 views
2

我有一个糟糕的分析瘫痪案例,所以我想我会打开它:iOS设计问题:如何在桌面视图中切换日期?

我有一个表格视图,它的内容表示在某一天发生的活动。当应用程序加载时,今天的数据被下载,解析(通过中央单身人士)并显示。够简单,而且效果很好。

我想增加前进/后退之间的能力,使用顶部的某种控制。一个很好的例子就是iOS日历应用程序的日视图。

或者,我可以使用导航栏初始化并推送新视图,并且可以使用导航栏和navigationItem.rightBarButtonItem & navigationItem.leftBarButtonItem

这里最好的方法是什么?它应该如何实现(例如,使用另一个中间视图或处理实际显示数据的表视图中的所有内容)?

回答

4

我在此时为客户开发的应用程序中实现了几乎与此相同的内容。

首先,我将你的表视图控制器上提供一个方法,你可以设置每天的数据显示:

- (void)setDayToDisplayDataFor:(NSDate *)date animated:(BOOL)animated; 

我选择的NSDate那里,例如,您可以显示数据在接下来的24从该日期开始的小时数。或者您可以选择另一种方法,取决于您和您的数据模型。替代方案可以是代表向后看天数的整数。

然后,我会开发一个自定义控件(UIView的子类),在两端都有两个左/右箭头按钮,中间是日期。您可以将其粘贴在表格视图的标题中,以便滚动屏幕或将其全部放在表格视图上方,以便在滚动时保持该状态。事情是这样的:

alt text

当用户点击一个按钮去向前/向后滑动可以在当前日期的标签出来向左或向右滑动在新的日期,给出了一个视觉信号。发生了什么。

该控件还应该致电代表通知其更改日期。在这种情况下,委托只是您的表格视图控制器。因此,当用户点击按钮时,您可以从自定义日期控件中获取新日期,并调用setDayToDisplayDataFor:animated:方法来显示更新的数据。如果你喜欢,你也可以动画这个表格视图的变化。

+0

对于(不是你的tableview的一部分)视图+1。我们一直这样做,让用户能够以有意义的方式操纵tableview。其中一个按钮上的touchUpInside强制在tableview上进行数据模型更改和reloadData。 – par 2010-12-04 19:57:15

+0

完美。奇迹般有效。 – 2010-12-04 22:22:20

0

我认为迈克的回答是一个很好的答案。我会进一步说,你的视图控制器视图可能主持两个单独的UITableViews(他们都可以使用你的视图控制器作为代表...)。这样做的原因是为了增强您在日间变更中的两种不同观点之间转换的能力。

您的视图层次可能是:

YourCustomViewController <UITableViewDelegate, UTableViewDataSource, CustomDatePickerDelegate> 
    view 
     date-picker-control-view 
     tableview1 
     tableview2 

采用这种结构,您可以使用内置的视图过渡动画tableview1和tableview2之间切换。

+0

我会拍摄视图的快照并淡入其中,有两个表格视图会相当重。有很多代码用于将视图快照转换为UIImage。然后,您只需使用上一张表的UIImageView进行输入/输出。 – 2010-11-30 20:27:57

+0

我不同意有两个表格将是资源方面的沉重负担。 – TomSwift 2010-12-01 02:03:07

+1

我不同意拥有两个表格会在资源方面造成沉重的负担。可能比生成位图更便宜,存储该位图并在每个转换中显示它。位图本身对于视网膜显示器大约为2.4MB。 – TomSwift 2010-12-01 02:12:59