2010-11-22 9 views
2

私はこの分析麻痺の悪いケースを持っているので、私はそれをSOに開くと思った:iOS設計に関する質問:日間の切り替えをテーブルビューで実装するにはどうすればよいですか?

私は、その内容が特定の日に行われた活動を表す。アプリが読み込まれると、今日のデータがダウンロードされ、解析され(セントラルシングルトンによって)、表示されます。十分に簡単で、それは素晴らしい作品です。

私は、いくつかの種類のコントロールを使用して、日の間を前後に進む機能を追加したいと考えています。優れた例は、iOSカレンダーアプリの日表示です。

または、ナビゲーションバーを使用して新しいビューを初期化してプッシュすることができました。navigationItem.rightBarButtonItem & navigationItem.leftBarButtonItem

ここで最善のアプローチはどのようにして実装する必要がありますか(別の仲介ビューを使用するか、実際にデータを表示するテーブルビューのすべてを処理するなど)。

答えて

4

私はこの時点でクライアント用に開発しているアプリケーションで、これとほぼ同じものを実装しました。

まず、私はあなたのためにデータを表示するために、1日に設定することができ、あなたのテーブルビューコントローラのメソッド公開します:私はそこにNSDateを選んだあなたは、たとえば次の24のデータを示すことができ

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

をその日から始まる時間。あるいは、あなたとあなたのデータモデルに最も適した方法を選ぶこともできます。代わりに、見るために後方への日数を表す整数を使用できます。

私はカスタムコントロール(UIViewのサブクラス)を作成し、左右に2つの矢印ボタンと中央にある日付ボタンを使用します。これをスクロールするときは、スクロールするか、テーブルビューの上に置くように、テーブルビューのヘッダーにスティックすることができます。このような何か:

alt text

ユーザーが前方/後方あなたが左または右に外れ、現在の日付ラベルをスライドさせて、新しい日付をスライドさせることができる行くためのボタンをタップする視覚的な手がかりを与えます。何が起きたの。

コントロールは日付の変更を通知するために代理人を呼び出す必要があります。この場合、デリゲートはあなたのテーブルビューコントローラだけです。ユーザーがボタンをタップすると、カスタム日付コントロールから新しい日付を取得し、setDayToDisplayDataFor:animated:メソッドに呼び出して更新データを表示します。必要に応じて、このテーブルビューの変更をアニメートすることもできます。

+0

+1(あなたのテーブルビューの一部ではない)のビュー。私たちは、ユーザに意味のある方法でテーブルビューを操作する能力を与えるために、これを常に行っています。いずれかのボタンのtouchUpInsideは、データモデルの変更とテーブルビューのreloadDataを強制します。 – par

+0

パーフェクト。魅力のように動作します。 –

0

マイクの回答は良いと思います。あなたのビューコントローラビューが2つの別々のUITableViewをホストするかもしれないと言ってもらえます(彼らはどちらもビューコントローラをデリゲートとして使うことができます...)。この理由は、1日の変更で2つの別々のビュー間で移行する能力を高めることになります。

あなたのビュー階層は次のようになります。あなたはビルトインビュー遷移アニメーションがtableview1とtableview2を切り替えるために使用することができます。この構成により

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

+0

私は、ビューのスナップショットを取ると、2つのテーブルビューを持つことはかなり重いものになるだろう、それを消すだろう。 UIImageにビューのスナップショットを撮るためのコードがたくさんあります。次に、前の表のUIImageViewを使用してトランジションイン/アウトするだけです。 –

+0

私は、2つのテーブルビューを持つことは、リソースに負担をかけることには同意しません。 – TomSwift

+1

私は、2つのテーブルビューを持つことは、リソースにとって負担になるとは考えていません。ビットマップを生成し、そのビットマップを格納し、各遷移でそれを表示するよりも安価である可能性があります。ビットマップ自体は網膜ディスプレイの場合約2.4MBになります。 – TomSwift

関連する問題