我有麻煩setNeedsDisplay。我有一個UIView,有很多子UIViews,在Inteface Builder中創建。我也有一個帶有IBAction的按鈕。在這個IBAction我想重新繪製/重新加載所有UIViews(或所有UIElements,如UILabel,UIWebView等..)重新加載/刷新子視圖 - setNeedsDisplay does not工作
我這樣做,這不適合我,不知道爲什麼..:
//redraw the UIViews
[self.view_card_0 setNeedsDisplay];
[self.view_card_1 setNeedsDisplay];
[self.view_card_stapel setNeedsDisplay];
//other UI Elements
[self.webView_0 setNeedsDisplay];
[self.webView_1 setNeedsDisplay];
[self.webView_stapel setNeedsDisplay];
[self.lblCardTitle_0 setNeedsDisplay];
[self.lblCardTitle_1 setNeedsDisplay];
[self.lblCardTitle_stapel setNeedsDisplay];
[self.img_card_0 setNeedsDisplay];
[self.img_card_1 setNeedsDisplay];
[self.img_card_stapel setNeedsDisplay];
如何重繪/重載/刷新所有UIElements/UIViews和Subviews?
編輯1:
我如何加載視圖:
detailViewController = [[DetailViewController alloc]
initWithNibName:@"DetailViewController_iPad" bundle:[NSBundle mainBundle]];
的detailviewcontroller已經沒有視圖控制器,只是uiviews,這裏的hierarchie:
- 的UIView
- UIViewContainer
--- UIView0
--- UIView1
--- UIViewStapel
我所期望的事情:
* 我不想要重置的UIView,我想改變背景和他們的內容。 *
我在我的detailview中有很多子視圖(uiviews),見上面hierarchie。我在UIViews中顯示內容,內容來自coreData。
view1包含coreData的當前行。
view0包含coreData的前一行。
viewStapel包含coreData的下一行。
隨着IBAction爲我想迭代coreData行,如果操作called..and所以在當前顯示的下一行..
在日誌中,數據被改變,但在UIViews不顯示。原因是我需要重繪或重新加載或類似的東西,以顯示當前的數據。
編輯2:解決
我已經把代碼放在一個新的方法和調用此方法已解決了我的問題。
你爲什麼要這麼做?你期待它做什麼?通常,在其他某個UI元素上調用'-setNeedsDisplay'不會執行任何操作*,因爲如果UI元素需要更新其顯示(以響應更改的屬性),它將自己調用該方法。 –
我正在改變IBAction的內容以及顏色/圖像。內容來自coreData。我需要重繪uiviews才能在ibaction上顯示更改。 – brush51
setNeedsDisplay只是重繪視圖,它不重置它的屬性(例如顏色)。要做到這一點,你必須從nib文件重新加載它們(見下面的答案)。 –