2017-10-10 81 views
0

你會如何在swift 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

你可以開始你結構模型設計擺脫隱含展開自選並使其PROPERT ies常量 –

回答

1

如果你總是將有7個細胞跨越視圖的頂部,只有7個細胞,老實說,我不會用一個UICollectionViewUICollectionView當你有很多你需要能夠滾動的數據/圖像時,它真的很有光澤。相反,我會將這些「單元格」正常放置在水平StackView的內部(S127)。

然後,您可以給那些UIView的是爲挖掘姿勢目標的行動,其中更新和更改使用在與所需任務的底部在你的UITableView來填補你的DatSource。

至於與數據更新,使得以Date()打電話會給設備的當前日期時間戳。您可以使用該對象的`.addingTimeInterval()'爲接下來的日子添加24,48等...小時。

編輯:

當然爲例,你提到你將有你的任務在數組中,你可以創建一個字典來保存任務的陣列的每一天,或數組的數組:var taskDictionary : [String : [Task]]?var taskArray : [[Task]]?

設置tapGesture的選擇,以將控制從詞典/陣列拉動內容的功能:

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

我以前tag財產這裏的一個例子,但這將是最好創建一個UIView子類,這樣你就可以訪問視圖中的UI元素:

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也有點不滿,現在你提到UIView似乎更合適。另外,你能否在第二段中擴展一點?所以我會爲每個UIView添加一個tapGestureRecognizer,它會以某種方式更改我的UITableView數據源?感謝您的任何澄清。 – Jumpman987