Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

viewDidAppear: not firing under certain conditions?

I have the following items in my app nib:

  • the usual: file's owner, first responder window, delegate
  • View Controller "a"
    • View "b"
      • UIScrollView "c"
      • some other stuff in "b"

In my AppDelegate applicationDidFinishLaunching, I do this:

  1. [window makeKeyAndVisible]
  2. [window addSubView:a.view];
  3. create a view controller "d"
  4. create a navigationController "e" with rootviewcontroller "d"
  5. invoke [c addSubView:e.view]

Question/problem: when I do all of the above, viewDidAppear: is not firing for "d". (but viewDidLoad IS firing.) How do I find out why it is not firing, and fix it so that it would fire?

(Why I want to use viewDidAppear: the above involves some chained animations and viewDidAppear looks like a good place for a view controller to know when its view has been loaded and animated, so it can trigger subsequent animations.)

like image 828
Jaanus Avatar asked Jan 27 '10 05:01

Jaanus


People also ask

What is the difference between viewDidLoad() and viewDidAppear()?

The difference between viewDidAppear and viewDidLoad is that viewDidAppear is called every time you land on the screen while viewDidLoad is only called once which is when the app loads.

What is called after viewDidAppear?

viewDidAppear is called once you see the loaded view on screen. It is called after view appeared. ViewDidAppear is called everytime when you see the view after it is loaded.

When viewWillAppear called?

viewwillappear method is called as and when the view controller's view is added to the window. ( if the view is already in the window and is hidden by another view, this method is called when the view is once again revealed). The method is a notification to the view controller that the view is about to become visible.

What is viewWillAppear in iOS?

Notifies the view controller that its view is about to be added to a view hierarchy.


1 Answers

Usually when you're manually screwing with the view hierarchy you won't get -viewWillAppear:, -viewDidAppear, etc.; they're called by various SDK methods, like -pushViewController:animated:, -presentModalViewController:animated:, and by UITabBarController when a tab gets selected.

When you add a view to the hierarchy yourself, it may or may not be onscreen or going-to-be-onscreen; the -addSubview: method doesn't make any assumptions about your intentions. Just call 'em yourself as you add the view.

like image 129
Noah Witherspoon Avatar answered Sep 28 '22 05:09

Noah Witherspoon