Widget生命週期與委託重疊連接
再次呼叫NativeConstruct時出現的問題
該部落格上撰寫的文章是出於教學目的而創建的。 另外,文章中的資訊可能不正確,請謹慎。
UUserWidget::NativeConstruct()人們很容易認為僅在第一次創建物件時調用一次。 但是,如果將小部件從螢幕上刪除並再次添加,則可能會再次呼叫 Construct。
代表可以冗餘連接
void UDailyProblemWidget::NativeConstruct()
{
Super::NativeConstruct();
SubmitButton->OnClicked.AddDynamic(
this,
&UDailyProblemWidget::HandleSubmit
);
}
如果 Construct 被呼叫兩次,則函數可能會在同一個按鈕點擊時執行兩次。 在儲存、扣貨、建立節點等邏輯上,對實際資料進行了冗餘處理。
在 ProjectDT 中,它被組織為在連接之前刪除相同的代理。
if (SubmitButton)
{
SubmitButton->OnClicked.RemoveDynamic(
this,
&UDailyProblemWidget::HandleSubmit
);
SubmitButton->OnClicked.AddDynamic(
this,
&UDailyProblemWidget::HandleSubmit
);
}
NativeOnInitialized 和 NativeConstruct
只需要準備一次的任務NativeOnInitialized()可能更合適。 每次螢幕返回時需要更新的值為NativeConstruct()我在單獨的安裝函數中處理它。
NativeOnInitialized:在物件的生命週期內一次
NativeConstruct:附加到視圖時可以再次調用
NativeDestruct:離開View時調用
在小工具集或重複使用結構中,物件建立和螢幕顯示不應被視為相同事件。 區分每個按鈕連接、資料初始化和螢幕更新應該在什麼時候執行非常重要。