iOS设计问题:如何在表视图中实现日与日之间的切换?

iOS设计问题:如何在表视图中实现日与日之间的切换?,ios,uinavigationcontroller,calendar,Ios,Uinavigationcontroller,Calendar,我在这件事上遇到了一个严重的分析瘫痪的案例,所以我想我应该把它公开给这样的人: 我有一个表视图,其中的内容表示某一天发生的活动。当应用程序加载时,今天的数据将被下载、解析(都由一个中心单例进行解析)并显示出来。很简单,而且效果很好 我想添加在两天之间前进/后退的功能,在顶部使用某种控制。iOS日历应用程序的日视图就是一个很好的例子 或者,我也可以使用导航栏和navigationItem.rightBarButtonItem&navigationItem.leftBarButtonItem初始化并

我在这件事上遇到了一个严重的分析瘫痪的案例,所以我想我应该把它公开给这样的人:

我有一个表视图,其中的内容表示某一天发生的活动。当应用程序加载时,今天的数据将被下载、解析(都由一个中心单例进行解析)并显示出来。很简单,而且效果很好

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

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


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

我在为客户开发的应用程序中实现了与此几乎相同的东西

首先,我将在您的表视图控制器上公开一个方法,您可以在其中设置显示数据的日期:

- (void)setDayToDisplayDataFor:(NSDate *)date animated:(BOOL)animated;
我在这里选择了NSDate,例如,您可以显示从该日期开始的未来24小时的数据。或者,您可以选择另一种方法,以最适合您和您的数据模型的方法为准。另一种选择是一个整数,表示向后查看的天数

我会开发一个自定义控件(UIVIEW的子类),两端有两个左/右箭头按钮,中间有日期。您可以将其粘贴在表格视图的标题中,使其从屏幕上滚动,也可以将其完全置于表格视图上方,使其在滚动时保持不变。大概是这样的:

当用户点击按钮向前/向后移动时,您可以将当前日期标签向左或向右滑动,然后将新日期滑入。这给了我们一个直观的线索


控件还应向代表发出通知,告知日期的更改。在这种情况下,委托只是您的表视图控制器。因此,当用户点击按钮时,您可以从自定义日期控件中获取新日期,并调用
setDayToDisplayDataFor:animated:
方法来显示更新的数据。如果您愿意,还可以设置此表视图更改的动画。

我认为Mike的答案很好。我还要进一步说明,视图控制器视图可能包含两个独立的UITableView(它们都可以将视图控制器用作代理…)。这样做的原因是为了增强你在一天的变化中在两种不同观点之间转换的能力

您的视图层次结构可能是:

YourCustomViewController <UITableViewDelegate, UTableViewDataSource, CustomDatePickerDelegate>
    view
      date-picker-control-view
      tableview1
      tableview2
YourCustomViewController
看法
日期选择器控件视图
表1
表2

通过这种安排,您可以使用内置的视图转换动画在tableview1和tableview2之间切换。

我会拍摄视图的快照并淡入淡入,拥有两个表视图将是非常沉重的负担。有很多代码可以将视图的快照拍摄到UIImage中。然后,您只需使用上一个表的UIImageView进行输入/输出转换。我不同意拥有两个TableView将是资源方面的负担。我不同意拥有两个TableView将是资源方面的负担。可能比生成位图、存储位图并在每次转换时显示位图的成本更低。对于视网膜显示,位图本身大约为2.4MB。对于桌面视图顶部(而不是其一部分)的视图,位图本身为+1。我们一直这样做是为了让用户能够以有意义的方式操作tableview。其中一个按钮上的touchUpInside强制更改数据模型并在tableview.Perfect上重新加载数据。工作起来很有魅力。