[英]Ensuring that a UIViewController is fully set up before loadView is called
有一個使用UIImageView
的UIViewController
,該圖像視圖使用圖像數據( NSData
)初始化。 它不使用XIB,但以編程方式創建其視圖:
- (void)loadView
{
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageWithData:self.imageData]];
scrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
scrollView.contentSize = imageView.bounds.size;
scrollView.delegate = self;
[scrollView addSubview:scrollView];
}
該數據必須通過另一控制器,該控制器被設置alloc
S, init
S,並推動該視圖控制器到導航控制器:
ImageViewController *imageViewController = [ImageViewController alloc] init];
imageViewController.imageData = someData;
[self.navigationController pushViewController:imageViewController animated:YES];
我如何知道需要完成的所有事情(在本例中是設置數據)是在調用loadView
之前完成的? 或者,我不知道,我必須創建一個自定義初始化程序,或者在視圖控制器收到數據時再次調用loadView
?
我遇到過許多類似的情況,我對將要發生的事情感到困惑,例如使用UITableViewController
。
我如何知道需要完成的所有事情(在本例中是設置數據)是在調用loadView之前完成的?
因為文檔提到視圖控制器在需要之前不加載視圖。 在導航控制器嘗試將其推入屏幕之前,不需要視圖控制器的視圖。
此外,將imageData
分配給圖像視圖的正確位置可能是viewDidLoad
(“如果要對視圖執行任何其他初始化,請在viewDidLoad
方法中執行此操作。”)。 並且你的loadView
方法不會以當前形式做任何可見的事情。 您必須在該方法中為視圖控制器的view
屬性分配視圖。
訪問視圖控制器的視圖屬性時將發生loadView。 您編寫的代碼將正常工作,因為第一次訪問view屬性將在pushViewController內部。
如果你寫了這個你有一個問題:
ImageViewController *imageViewController = [ImageViewController alloc] init];
NSLog(@"size = (%.0f, %.0f)", imageViewController.view.frame.size.width,
imageViewController.view.frame.size.height);
imageViewController.imageData = someData;
[self.navigationController pushViewController:imageViewController animated:YES];
因為您訪問NSLog中的視圖屬性。 這將導致在設置imageData之前調用loadView。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.