0

我在标签视图上有一个表格;我将任何字段的表单标记为已更改,如果表单已更改(代替“保存”按钮),我想弹出一个带有“保存”/“取消”的 ActionSheet。在用户响应正在处理的 ActionSheet 之前,有什么方法可以阻止视图消失(或从视图堆栈中删除)?

4

2 回答 2

3

几个想法:

  1. 值得注意的是,Apple 的人机界面指南(HIG) 明确不鼓励这种做法。他们建议应用程序应该“仅在必要时要求人们保存”,因为人们“应该相信他们的工作总是被保留,除非他们明确取消或删除它。” 也许在您的情况下,拥有此功能很重要,但通常不鼓励这样做。

  2. 另一种方法是,如果您想让用户有机会恢复到旧设置,请提供一个“撤消”按钮,这样,您可以尊重 HIG 并有效地自动保存,但您也可以让用户明确恢复到先前的值如果他们真的需要。

  3. 正如其他人所指出的,提示保存或丢弃的概念viewWillDisappear并不完全有效。在这个过程中逻辑上为时已晚。viewWillDisappear可能由于太多原因而被调用,其中许多原因不在您的控制范围内,并且未能及时返回该方法、引入新的用户界面元素等并不是无稽之谈。

  4. 如果您真的,真的需要“保存”与“取消”用户界面,那么它更适合于模式界面(或推送一个新的视图控制器,您必须弹出它才能返回到您的标签栏视图控制器)带有保存和取消按钮,而不是标签栏界面。例如,您的标签栏视图可以显示当前值,您点击“编辑”按钮,该按钮会通过保存和取消按钮推送新视图。我们对您的应用了解不足,无法就您的情况给出建议是否合乎逻辑。(有关另一种方法,请参阅在视图控制器中启用编辑模式。)

于 2012-05-27T14:49:19.810 回答
0

viewWillDisappear:一旦应用程序进展到被调用的位置,您就无法阻止视图消失。要做的事情是创建一个函数,如:

- (void)saveAndClose {
    //Display sheet asking user what they want to do
}


- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated
{
    if (buttonIndex == 0) // 0 or whatever the index of your save button is
    {
        // Perform save functions
    }

    [self dismissModalViewControllerAnimated:YES]; // or pop the view controller if appropriate
}
于 2012-05-27T05:23:14.737 回答