2017-10-10 7 views
0

どのように迅速なiosで「週のビュー」をデザインしますか? UI上の写真で

日が経過次の日に7日間のコレクションビュー(「週間ビュー」)とデザインそのオートインクリメント各セルの詳細を、これは7であります細胞は静的である。上記のように、毎日、それに関連付けられたタスクのリストがあり、毎日、ユーザーはパーソナルトレーナーによって割り当てられたすべてのタスクを試して完了する必要があります。

私はこのようなアプリケーションを構築して行く方法については、以下の設計の質問のカップルを列挙されています:新しい日が経過するにつれて

どのように私は自動更新に7集細胞を設計でしょうか? 毎日どのようにして独自のタスクリストを保持できますか? 私はコードの下にいくつかのデータモデルコードと私の考えを提供します。

ここでは私のタスク用の構造体ですが、毎日のタスクが異なる可能性があるため構造体を選択しましたが、それらが似ているか同じであれば、構造体をコピーしてそこから変更すると最適です。タスクは別の画面のパーソナルトレーナーによって作成されますが、私はこのモデルが十分だと思います。皆さんはどう思いますか?

struct Task { 
    var taskIcon: UIImage! 
    var taskName: String! 
    var taskDesc: String! 
} 

// Put the Task model in array to use in each day? 
var tasks = [Task]() 

"週表示"については、毎日のタスクの固有リストをどのように割り当てるのですか?パーソナルトレーナーがその日のタスクを作成するとき、コレクションビューのインデックスはどのようにタスクのユニークな配列を保持しますか?これが最も最適な方法であるかどうかは分かりません

コードを書く人は必ずしもいません(ただし、これは素晴らしいことですが)。どのようにそれを行う必要があります。どんなアドバイスも歓迎されます。

+1

あなたは暗黙的に開封されたoptionalsを取り除くと、そのpropertを作る取得します構造体モデルの設計を開始することができますies定数 –

答えて

1

ビューの上部に7つのセルがあり、7つのセルしかない場合は正直言ってUICollectionViewを使用しません。 UICollectionViewあなたがスクロールする必要があるたくさんのデータ/画像を持っていると本当に輝きます。代わりに、私はそれらの '細胞'を正常にUIView s(7)水平StackViewの内部に配置します。

次に、UITableViewの下部に必要なタスクを記入するために使用されるDatSourceを更新および変更する、タップされたジェスチャーに対するこれらのUIViewのターゲットアクションを与えることができます。

日付を更新する限り、Date()を呼び出すと、デバイスの現在のdateTimeスタンプが与えられます。そのDateオブジェクトの `.addingTimeInterval() 'を使って、24,48、etc ...時間を翌日に追加することができます。

EDIT:

確か例えば、あなたが、アレイ内のタスクを持ってしようとしている、あなたは毎日のタスクの配列、または配列の配列を保持するための辞書を作成することができます言及:var taskDictionary : [String : [Task]]?私は、たとえばここにtagプロパティを使用しますが、

func dayOfWeekTapped(_ sender: UIView) { 
    myTableViewDataSource = taskDictionary[sender.tag] 
    //myTableViewDataSource = taskArray[sender.tag] 
    myTableView.reloadData() 
} 

:辞書/配列からコンテンツを引っ張って制御する機能にtapGestureのセレクタを設定するか、var taskArray : [[Task]]?

あなたはビュー内のUIElementにアクセスできるように、UIViewのサブクラスを作成する方が良いでしょう:

func dayOfWeekTapped(_ sender: CustomUIView) { 
    myTableViewDataSource = taskDictionary[sender.dateLbl.text] 
    //myTableViewDataSource = taskArray[(sender.dateLabel.text as! NSString).intValue] 
    myTableView.reloadData() 
} 

私はこの質問を考えると好奇心旺盛だが、カスタムUIViewのは非常に迅速に(このようなものを見ることができるましたそれは少しをクリーンアップすることができるよう)一緒に投げ:

protocol DayViewTappedDelegate { 
    func daySelected(_ selectedLabelText: String) 
} 

class DayView: UIView { 
    @IBOutlet var dateLbl: UILabel! 

    var tapGesture: UITapGestureRecognizer? 
    var delegate: DayViewTappedDelegate? 

    func setDelegateAndTap(_ delegate: DayViewTappedDelegate) { 
     self.delegate = delegate 
     self.tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.dayViewTapped)) 
     tapGesture?.numberOfTapsRequired = 1 

     self.addGestureRecognizer(tapGesture!) 
    } 

    @objc 
    func dayViewTapped() { 
     delegate!.daySelected(self.dateLbl.text!) 
    } 
} 

VC:

class ViewController: UIViewController, DayViewTappedDelegate { 
    @IBOutlet var dayBtns : [DayView]! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     for i in 0 ..< dayBtns.count { 
      let date = Date().addingTimeInterval(TimeInterval(86400 * i)) 
      let dateFormatter = DateFormatter() 
      dateFormatter.dateFormat = "dd" 

      dayBtns[i].dateLbl.text = dateFormatter.string(from: date) 
      dayBtns[i].dateLbl.textAlignment = .center 
      dayBtns[i].setDelegateAndTap(self) 
     } 
    } 

    func daySelected(_ selectedLabelText: String) { 
     print(selectedLabelText) 
    } 
} 
+0

私はUICollectionViewでも少しiffyでしたが、UIViewは今言及したようになりました。また、あなたはおそらくあなたの2番目の段落に少し拡大することができますか?だから私は何とか私のUITableViewデータソースを変更する各UIViewのtapGestureRecognizerを追加しますか?任意の説明をありがとう。 – Jumpman987

関連する問題