簡體   English   中英

未調用UIViewController的loadView

[英]loadView of UIViewController not called

我想以編程方式在NavigationController中設置UIViewController,但是調用loadView和viewDidLoad方法。

這是我在app delegate中的代碼:

MyViewController *viewController = [[MyViewController alloc] init];
UIView *view = [[UIView alloc] initWithFrame:window.frame];
viewController.view = view;

UINavgationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];

[window addSubview:[navController view];
[window makeKeyAndVisible];

當我啟動應用程序時,我看到一個導航欄,但沒有調用loadView。 我錯過了什么? 我認為調用view后會調用loadView

編輯

MyViewController *viewController = [[MyViewController alloc] init];
[viewController view];  // doesn't look right?

UINavgationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];

[window addSubview:[navController view];
[window makeKeyAndVisible];

編輯了Jonah的評論,但loadView仍然沒有被調用。

當調用控制器的view getter並且其視圖當前為nil時, UIViewController將創建其視圖(通過從nib加載或實現-loadView )。

在顯示的代碼中,您永遠不會調用view屬性的getter,只調用它的setter。

此外,您還要從應用程序委托中分配控制器的視圖。 UIViewController應該按需創建自己的視圖,而不是由其他類提供它們。 當您意識到控制器卸載其視圖並嘗試重新創建它以響應內存警告時,此方法將在以后引發問題。 讓你的控制器創建它的視圖,不要試圖傳遞它。

另一個值得注意的問題是,如果你定義一個

@synthesize view;

在您的實現中沒有匹配的@property,這可能導致調用視圖控制器返回nil,而不調用loadView方法。

也許你沒有遇到這個問題......但是前幾天我遇到了同樣的煩惱..在我的UIViewController中沒有調用loadView,viewDidLoad和viewWillAppear。

我的問題是簡單但有點棘手,如果你不是很小心的話。 而不是寫作

-(void) loadView

我寫:

-(void) loadview

請注意,這不會發出任何警告。 loadView中“V”和“v”的差異很容易被忽略。 顯然,由於loadView沒有被調用,viewDidLoad / viewWillAppear也不會被調用,因為沒有加載的視圖(我沒有使用任何nib ...以編程方式創建視圖)。

-Anshu

暫無
暫無

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

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