Tag: viewdidload

viewDidLoad()vs. loadView()(Swift3)

这个月在Flatiron学校,我们深陷“项目模式”! 对于小组的项目,我一直在视图中使用程序化UI元素,这使我成为本博客文章的主题。 现在,我们都知道并喜欢视图控制器中的viewDidLoad(),但是loadView()呢? 这个loadView()函数是什么? loadView()是由viewController管理的方法。 当其当前视图为nil时,viewController调用它。 loadView()基本上获取一个视图(您创建的)并将其设置为viewController的视图(superview)。 可以为我们的viewController创建视图的方式有哪些? 好了,您可以创建一个xib(nib),可以使用情节提要(Interface Builder),也可以以编程方式创建一个UIView对象。 因此,如果我使用情节提要,是否需要使用loadView()? 如果使用情节提要,则不需要使用loadView()。 实际上,不要重写此方法。 仅当您手动创建视图(即不是故事板)时才重写此方法。 loadView()创建并实例化UIView对象。 因此,如果我从Xib / Nib创建视图并想进一步对其进行自定义,则应使用哪种方法? 使用名为viewDidLoad()的方法,即loadView()完成其工作并且UIView准备好显示之后。 viewDidLoad()允许您初始化view / viewController对象的属性,并在调用viewWillAppear()之前将其完成。 那么,首先加载哪种方法? 当视图完成加载时,将调用viewDidLoad(),而在视图开始加载时,将调用loadView()。 希望这有助于弄清差异! 资源: loadView()— Apple文档 viewDidLoad()— Apple文档

在iOS中测试viewDidLoad

假设我们有以下视图控制器 类ListController:UIViewController { 覆盖func viewDidLoad(){ super.viewDidLoad() view.backgroundColor = .white } } 了解viewDidLoad 我们知道第一次创建viewDidLoad会调用viewDidLoad 。 因此,在单元测试中,如果使用viewDidLoad进行触发,则会陷入陷阱 func testSetup(){ 让控制器= ListController() controller.viewDidLoad() } 为什么viewDidLoad被调用两次? 在测试中被调用一次 在您的viewDidLoad方法中,您将访问第一次创建的view ,因此它将再次触发viewDidLoad 正确的方法 最佳做法不是自己触发事件,而是做一些事情使事件发生。 在单元测试中,我们只是访问view以触​​发viewDidLoad func testSetup(){ 让控制器= ListController() 让_ = controller.view } 原始故事https://github.com/onmyway133/blog/issues/52

未声明标识符“viewDidLoad”

//Objects list //objects scroll UIScrollView *objects; objects=[[UIScrollView alloc]initWithFrame:CGRectMake(0,80,512,688)]; objects.showsVerticalScrollIndicator=YES; objects.scrollEnabled=YES; objects.userInteractionEnabled=YES; objects.backgroundColor = [UIColor clearColor]; [self.view addSubview:objects]; [objects setUserInteractionEnabled:YES]; [objects setCanCancelContentTouches:YES]; objects.contentSize = CGSizeMake(512,689); //divider UIButton *divider = [UIButton buttonWithType:UIButtonTypeCustom]; [divider setBackgroundImage:[UIImage imageNamed:@"white.png"]forState:UIControlStateNormal]; divider.frame = CGRectMake(300, 0, 1, 768); [divider setTitle:@"" forState:UIControlStateNormal]; [self.view addSubview:divider]; divider.adjustsImageWhenHighlighted = NO; //array colors UIImage *color[3000]; //color setup color[0] = […]

在TabBarController中的UIImagePickerController

我想实现在UITabBarController里面的imagepickercontroller。 到现在为止还挺好…. 在我的ViewController,我启动imagePickerController,然后放置在我的TabBarViewController tabbar数组中,我实现了“loadview”方法: – (void)loadView{ self.arController = [[IFAugmentRealityController alloc] initWithViewController:self]; [self showCamera]; [self initOverlayController]; self.picker.delegate = self; [self.view addSubview:self.picker.view]; } – (void)initOverlayController { overlay = [[IFAROverlayView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGTH)]; overlay.delegate = self; } – (void)showCamera { self.picker = [[UIImagePickerController alloc] init]; self.picker.navigationBarHidden = YES; self.picker.toolbarHidden = YES; self.picker.sourceType = UIImagePickerControllerSourceTypeCamera; self.picker.showsCameraControls = […]

如何使一个消息传递给另一个页面?

我的问题是不同的用户将有权访问不同的产品。 说用户1有权访问3,而用户2可以访问所有4。 我可以login哪里,如果用户1login,它会告诉MainView只显示3个单元格? 像在MainView中的ViewDidLoad东西读取什么login页面回声? 可以这样做吗? 谢谢。

引用项目在viewDidLoad中安全地初始化

本周早些时候我遇到了一个奇怪的错误,并希望跟进,看看如何防止问题的根本原因。 采取下面的代码。 //***************************** //MAINVIEWCONTROLLER CLASS CODE //***************************** //Some event happens that triggers me to want to load up TestViewController. func showViewController(){ var testController = TestViewController() testController.someMethod("Test1") self.navigationController?.pushViewController(testController, animated: true) } //***************************** //TESTVIEWCONTROLLER CLASS CODE //***************************** testView:TestView! override func viewDidLoad(){ super.viewDidLoad() testView = TestView() … } func someMethod(someData:String){ testView.name = someData //AppCrashes here because testView might […]

在我的UIViewController中放置有什么区别吗?

可能重复: [super viewDidLoad]约定 在我的UIViewController的viewDidLoad中放置[super viewDidLoad]是否有所作为? 也就是说,它应该在开始(在我的代码设置UIViewController之前)或结束)在我的代码之后设置UIViewController)的方法,还是没有什么区别?

在调用super的viewDidLoad和viewWillAppear之前/之后放置代码

由于UIViewController中的关键字“did”和“will”,我不确定在viewDidLoad和viewWillAppear中调用super之前/之后放置代码的位置,以使代码有效地运行。 例如: – (void)viewDidLoad { [super viewDidLoad]; // Code is here because whatever // setup in super should been done first // before we can do anything } – (void)viewWillAppear:(BOOL)animated { // Code should be here to finish // whatever we want to do in our view // before calling super [super viewWillAppear:animated]; } 这可能会被应用到didRotate和willRotate。 […]

为什么CLLocationManager总是返回true?

我正在使用[CLLocationManager locationServicesEnabled]函数来获取是否启用位置服务的状态。 我保持viewDidLoad方法中的代码。 if(![CLLocationManager locationServicesEnabled]) { NSLog(@"No"); } else { NSLog(@"Yes"); } 当我第一次运行这个应用程序时,它返回Yes 。 为什么? 它应该返回我No 。 当我没有select“允许”或“不允许”选项时就是这种情况。 我意味着我既不允许也不允许,但是在我viewDidLoad我已经得到了。 现在我select“不允许”,并再次加载相同的viewController 。 这个时候至less应该还给我No ,但是我还是得到了。 为什么? 与CLLocationManager混淆很多。 有任何想法吗?

ViewDidLoad在添加到容器视图时未被调用

我有一个容器视图设置在故事板文件中,但我想在设置一些属性后以编程方式embedded视图控制器。 这是我父母VC的viewDidLoad中的代码: _workoutVC = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"entryTableVC"]; _workoutView = _workoutVC.tableView; [self addChildViewController:_workoutVC]; [_workoutVC.tableView setFrame:_container.bounds]; [_container addSubview:_workoutView]; 但是,在任何时候都不会调用子项中的viewDidLoad。 当我运行模拟器我的容器视图是空白的。 我已经检查了debugging器,我的任何属性都是nil 。