1

我的屏幕上有很多标签,我想给出一个警告框,上面写着“你想保存更改吗?” 如果用户更改页面中的任何内容,而不单击页面中提供的保存按钮,他正在单击差异选项卡。我能够获得警报视图,但选项卡单击会将屏幕移动到单击的选项卡。在警报视图得到答复之前,屏幕不应更改。

谁能让我知道如何在警报视图得到回答之前抑制屏幕更改?

4

2 回答 2

3

这并不能直接回答您的问题,但是:您尝试做的事情听起来像是糟糕的 UI 设计。(一般来说,如果你觉得你在与 UIKit 作斗争,那你可能做错了。)

在这种情况下:如果你真的想确保用户在移动到不同的屏幕之前点击保存按钮,你应该在模式视图中显示该屏幕,这样就不可能导航到应用程序的任何其他部分。

换句话说,如果您想阻止用户离开屏幕,请不要向他们显示允许他们离开的按钮或选项卡。否则,您只会为自己做更多的工作并使用户感到沮丧。

于 2012-10-24T03:49:13.633 回答
2

UITabBarControllerDelegate在您的应用委托中实施applicationDidFinishLaunching

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
    self.tabBarController.delegate = self;
    [window addSubview:self.tabBarController.view];
}

然后使用下面的委托方法,

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController;

此方法在选项卡切换之前调用,您可以在此处返回 no 以禁用它并显示警告消息。一旦用户执行了保存,他可以再次按下选项卡,或者您可以以编程方式切换到新选项卡,如下所示,

self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:0];

在你的委托中添加这个,

以编程方式切换到选项卡怎么样?

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
      if () {
        //some code
      } else {
        //some other code
        self.tabBarController.selectedViewController = viewController;
      }
}
于 2012-10-24T03:49:49.360 回答