3

我的应用程序使用带有 splitviewcontroller 的情节提要。在左侧,我有一个带有选项列表的表格视图。在右侧,我有一些关于左侧选项的信息。就像在设置应用程序中一样。当用户选择左侧的选项时,右侧的内容会发生变化。左侧的每个选项都有一个视图控制器。这些视图控制器嵌入在一个导航视图控制器中(每个视图控制器一个导航视图控制器)。

当用户在左侧选择一个选项时,将执行 segue。它的类型是“替换”,其目标是“详细拆分”。

我的问题是,每次用户选择左侧的选项时,右侧视图控制器的 viewWillDisappear 都会被调用两次。为什么会这样?

4

3 回答 3

7

我也有这个,原来我的问题是我调用了错误的超级方法,在我的情况下,在我覆盖的方法中调用方法[super viewDidAppear:animated]内部。- (void)viewDidDisappear:(BOOL)animated可能不是你的问题,但以防万一有一天有人偶然发现。

于 2014-02-26T04:32:43.557 回答
1

首先,让我说,这很糟糕。我也遇到了这个问题,找到了你的帖子。经过实验,我们意识到-viewDidDisappear:只被调用一次。因此,任何导致双重调用的错误(当视图控制器位于 SplitView 中的 UINavigationController 内时)似乎都不会发生在 viewDidDisappear 上。

这是一个愚蠢的组合,但这个错误也很愚蠢。希望这可以帮助。

于 2014-02-20T03:52:34.713 回答
0

好的,我花了一段时间对此进行调查,但最后我不得不采用一种解决方法。

在我的情况下,如果“离开”详细视图而不保存详细视图内容,我想显示警报。

我添加了一个实例变量 boolean,最初设置为 false (NO)。

然后,在 viewWillDisappear 中,如果布尔值为 NO,我将其设置为 YES,并显示警报。

然后我将布尔值重置为 NO is viewDidDisappear (这也可以在警报回调中完成)。

不是很优雅,但这似乎工作得很好。

- (void) viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    if ([self isDirty] && ![self showingAlert])
    {
        [self setShowingAlert:YES];

        UIAlertView *alert =
             [[UIAlertView alloc]
                    initWithTitle: @"Save Changes?"
                    message: @"Use it or lose it, matey."
                    delegate: self
                    cancelButtonTitle:@"Save"
                    otherButtonTitles:@"Don't Save",nil];

        [alert show];

        [alert release];
    }
}

- (void) viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];

    [self setShowingAlert:NO];
}
于 2012-09-06T12:37:17.060 回答