我正在寫一個基本的iOS日曆應用程序使用swift。目前,我的主視圖包含一個子視圖 - 「月視圖」 - 其中包含五個「周視圖」,每個視圖包含7個「日視圖」。主視圖控制器被設置爲每個子視圖的代表,每個子視圖都可以被觸摸以觸發一個新的「日視圖控制器」,該日曆控制器加載所選日期的所有信息。日視圖控制器還在頂部導航欄上有一個按鈕「完成」按鈕,該按鈕觸發退回到主視圖控制器。迅速子視圖不更新後放鬆segue
問題是:在展開segue之後,day視圖控制器中「day」的數據成功傳遞迴主視圖控制器(我從調試我的數據模型中知道這一點),但是視圖主視圖控制器不會更新以正確顯示來自更新日期的信息。
我曾嘗試在segue上調用「setNeedsDisplay」和「setNeedsLayout」,並在主「月視圖」以及每個單獨的「日視圖」上調用「viewWillAppear」和「viewDidAppear」,但沒有更新。我也嘗試刪除和添加每個單獨的一天子視圖(只是爲了得到某些事情發生),但這導致新的一天與正確的信息疊加在舊的一天。我已經全面搜索瞭解決方案。我相信我可能會錯過一些快速的設計原則。非常感謝您提前!
下面是SEGUE代碼:
@IBAction func unwindToCalendar(sender: UIStoryboardSegue) {
if let sourceViewController = sender.sourceViewController as? dayUIViewController {
var tag = sourceViewController.tag
let dayOfWeek = tag%10
tag=tag/10
let weekOfMonth = tag%10
monthView.weekList[weekOfMonth].dayList[dayOfWeek] = sourceViewController.day
//monthView.weekList[weekOfMonth].dayList[dayOfWeek].updateLabel()
monthView.weekList[weekOfMonth].dayList[dayOfWeek].setNeedsDisplay()
}
}
更新:更新天子視圖的相關屬性 給了我想要的效果(即當我轉換回日曆視圖,選擇日反映了我從日視圖控制器所做的更改)。
所以更換此:
monthView.weekList[weekOfMonth].dayList[dayOfWeek] = sourceViewController.day
與此:
monthView.weekList[weekOfMonth].dayList[dayOfWeek].dayOfMonth = sourceViewController.day.dayOfMonth
monthView.weekList[weekOfMonth].dayList[dayOfWeek].updateLabel()
得到所需的 「視覺」 的結果。但爲什麼用新的日視圖替換整個日視圖也不能達到這個結果呢?
什麼_is_'monthView.weekList [weekOfMonth] .dayList [dayOfWeek)'?它看起來像某種_data_,而不是_view_。 – matt
月視圖有一個包含星期子視圖數組的屬性,而星期子視圖具有天子視圖的類似屬性(在添加到此數組之前,所有這些子視圖都作爲子視圖添加到其父視圖中)。我這樣設置,這樣我就可以通過數組索引更輕鬆地訪問日視圖。 – killian95
這裏有一個建議:你是否看到過,是否有任何瘋狂的機會,這一切都發生在後臺線程上?任何時候在更新界面時都會有一些不負責任的延遲,但我發現它通常是由於偶然嘗試從主線程更新界面而導致的。 – matt