簡體   English   中英

在NSBox中重新加載視圖時出現問題

[英]Issues when reloading views in an NSBox

重新加載視圖時出現問題。 OSX不像IOS那樣簡單。

在MainMenu.xib中,我有一個NSBox。 根據Hillegrath,幾個視圖存儲在一個數組中,並且當按下分段按鈕時,這些視圖將公開。 這可以正常工作。 我的挫敗感涉及在進行更改后應重新訪問這些視圖,這些更改應導致它們通過[self someAction] 重新顯示新值。 兩個視圖中的操作會更改(全局)值,這些值應傳播其他視圖中的更改。 我正在使用帶有w / xib的窗口控制器(MainMenu)來容納包含視圖的框。 我還用代碼為視圖命名。

必要時,全局ivar值會正確更改,日志會顯示該值。 但是,重新訪問視圖(即更新視圖詳細信息)時不會發生從屬操作。

似乎發生的是,當顯示各種視圖時,不會調用loadView ** **。 第一次顯示每個視圖但重新顯示時,awakeFromNib和loadView可以正確運行。 這意味着該視圖可能是隱藏的,但viewDidUnhide無效。

視圖更改代碼(來自SO MVC答案和Hillegrath)是

 NSViewController *activeVC =
        (NSViewController *) self.viewControllers[index];
   // [_box setContentView:nil];
    [_box setContentView:activeVC.view];
    [_box setNeedsDisplay:YES];

從復制的代碼中可以看出,在設置新視圖之前,我還嘗試將活動內容設置為nil,但無濟於事。

任何想法,建議,通知均無法執行,但可能無法正確設置。

謝謝

看來您將顯示加載與顯示混淆了。 僅當加載了nib文件時,nib文件對象才會接收-awakeFromNib 同樣,僅在加載了相應的nib文件時,視圖控制器才會接收-loadView 由於將視圖控制器保留在陣列中,因此不會取消分配這些視圖控制器,因此在陣列處於活動狀態時,永遠不會卸載其相應的nib文件。 這是合理的行為,但必須記住-awakeFromNib-loadView在這種情況下僅執行一次,因為筆尖加載僅執行一次。

由於您似乎是在-loadView中手動填充視圖, -loadView ,只要將該視圖設置為框的內容視圖,就還必須這樣做(假設模型更改時並非總是更新視圖)。 例如,您可以在視圖控制器中使用-reloadData方法,並且-loadView和框的內容視圖交換方法都將使用-reloadData

或者,您可以將模型對象設置為視圖控制器的表示對象,並將相應視圖中的控件綁定到該表示對象的屬性。 NSViewController暴露了representedObject屬性,是便於綁定。

作為記錄, -[NSBox setContentView:]標記要重新顯示的框,因此您無需發送它-setNeedsDisplay:YES

(並確保_box實際上指向NSBox實例)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM