簡體   English   中英

使用loadView時未調用viewDidLoad

[英]viewDidLoad not called when using loadView

任何人都可以解釋為什么在使用loadView時不會調用viewDidLoad? 我的理解是viewDidLoad應該仍然被調用。

- (void)loadView
{
    CGRect currentFrame = [[UIScreen mainScreen] applicationFrame];

    UIView* myView = [[UIView alloc] initWithFrame:CGRectMake(currentFrame.origin.x, currentFrame.origin.y, currentFrame.size.width, currentFrame.size.height)];
    myView.backgroundColor = [UIColor redColor];

    self.view = myView;
    [myView release];

    [super loadView];
}

- (void)viewDidLoad {

    //this never happens
    NSLog(@"VIEW DID LOAD!");
    [super viewDidLoad];
}

我剛剛發現,如果在應用程序中手動調用loadView,則不會調用viewDidLoad。 如果手動調用loadView,則還必須手動調用viewDidLoad。

根據apple docs,您不應該調用[super loadView],因為它會使用默認的UIView覆蓋您的視圖。

你必須在這里發出警告:

NSLog("VIEW DID LOAD!");

相反,你應該寫這樣(@符號是必要的):

NSLog(@"VIEW DID LOAD!");

創建ViewController實例時,不會調用viewDidLoad。 當您將其推送到導航控制器或將其作為模型視圖控制器呈現時,只會調用viewDidLoad。 除非您呈現viewController,否則這些委托將不會被調用。 還有一件事,如果你的viewcontroller表示結束,但它仍然保留在堆棧或內存中,那么viewDidLoad方法將不再被調用,因為它已經加載了視圖。 然后,只有在呈現相同的viewController時才會調用viewWillAppear和viewDidAppear委托。

暫無
暫無

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

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