sudo rm -rf
sudo rm -rf

Reputation: 29524

How to receive a notification when a view will appear?

When I'm doing a half-page curl modal transition:

alt text

How can I tell when the page has been restored back to it's current state? I want to call something when the "settings" view has been closed.

I tried to use viewWillAppear:(BOOL)animated but it doesn't seem to get called when closing the view. Any ideas?

Upvotes: 2

Views: 2202

Answers (3)

user207616
user207616

Reputation:

You can register an NSNotificationCenter observer on your master view and post the notification on your background view. And instead of viewWillAppear you can use viewDidLoad.

// EDIT: sample code to get a touch gesture in a given rect

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    if ([[event allTouches]count] == 1) {
        UITouch *t = [[touches allObjects]lastObject];
        CGPoint p = [t locationInView:self.view];
        if (p.y < 200) NSLog(@"above 200");
    }
}

Upvotes: 2

WrightsCS
WrightsCS

Reputation: 50727

In your viewDidLoad, register a Notification:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(updateView:) 
                                             name:@"updateRootView"
                                           object:nil];

Now this is the notification that we call

- (void) updateView:(NSNotification *) notification
{
    /*  notification received after the page is uncurled  */
}

The calling method:

- (void) unCurlPage
{
    // All instances of TestClass will be notified
    [[NSNotificationCenter defaultCenter] postNotificationName:@"updateRootView" object:self];
}

And don't forget to dealloc the notification

- (void) dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [super dealloc];
}

Upvotes: 1

Allyn
Allyn

Reputation: 20441

ViewWilAppear is a UIViewController message/method. If you are only changing views, it won't get called. What does the code you are using to close the settings view look like?


Edit

It sounds like you need to refactor a bit. Assuming all this is handled by the parent UIViewController for this settings view, you could implement something like:

- (void)settingsPanelOpen {
    // present the modal
    // hook to inform of opening (if necessary)
}

- (void)settingsPanelClose {
    // dismiss modal
    // hook to inform of closing
}

Then settingsPanelClose could have a hook into it if you need to know when the settings closes.

The other thing you could do is subclass UIViewController as SettingsViewController and override the viewDidDisappear: method to kick off a SettingsDidSave notification or otherwise inform your app that it has closed.

Upvotes: 0

Related Questions