我的屏幕上有很多标签,我想给出一个警告框,上面写着“你想保存更改吗?” 如果用户更改页面中的任何内容,而不单击页面中提供的保存按钮,他正在单击差异选项卡。我能够获得警报视图,但选项卡单击会将屏幕移动到单击的选项卡。在警报视图得到答复之前,屏幕不应更改。
谁能让我知道如何在警报视图得到回答之前抑制屏幕更改?
我的屏幕上有很多标签,我想给出一个警告框,上面写着“你想保存更改吗?” 如果用户更改页面中的任何内容,而不单击页面中提供的保存按钮,他正在单击差异选项卡。我能够获得警报视图,但选项卡单击会将屏幕移动到单击的选项卡。在警报视图得到答复之前,屏幕不应更改。
谁能让我知道如何在警报视图得到回答之前抑制屏幕更改?
这并不能直接回答您的问题,但是:您尝试做的事情听起来像是糟糕的 UI 设计。(一般来说,如果你觉得你在与 UIKit 作斗争,那你可能做错了。)
在这种情况下:如果你真的想确保用户在移动到不同的屏幕之前点击保存按钮,你应该在模式视图中显示该屏幕,这样就不可能导航到应用程序的任何其他部分。
换句话说,如果您想阻止用户离开屏幕,请不要向他们显示允许他们离开的按钮或选项卡。否则,您只会为自己做更多的工作并使用户感到沮丧。
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;
}
}