如何在视图出现时收到通知?

时间:2010-12-21 22:05:39

标签: iphone objective-c cocoa-touch uiview

当我正在进行半页卷曲模态转换时:

alt text

如何判断页面何时恢复到当前状态?我想在“设置”视图关闭时调用一些东西。

我尝试使用viewWillAppear:(BOOL)animated但是在关闭视图时似乎没有调用它。有任何想法吗?

3 个答案:

答案 0 :(得分:2)

您可以在主视图上注册NSNotificationCenter观察者,并在背景视图上发布通知。而不是viewWillAppear,您可以使用viewDidLoad。

//编辑:在给定的矩形中获取触摸手势的示例代码

- (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");
    }
}

答案 1 :(得分:1)

在viewDidLoad中,注册通知:

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

现在这是我们称之为

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

调用方法:

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

不要忘记取消通知

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

答案 2 :(得分:0)

ViewWilAppear是一个UIViewController消息/方法。如果您只是更改视图,则不会调用它。您用来关闭设置视图的代码是什么样的?


修改

听起来你需要重构一下。假设所有这些都由父UIViewController处理此设置视图,您可以实现类似:

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

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

如果您需要知道设置何时关闭,那么settingsPanelClose可能会有一个钩子。

您可以做的另一件事是将UIViewController子类化为SettingsViewController并覆盖 viewDidDisappear:方法以启动SettingsDidSave通知或以其他方式通知您的应用它已关闭。