2010-11-22 50 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