Ios 在用户更改到另一个选项卡之前,施加需要满足的条件

Ios 在用户更改到另一个选项卡之前,施加需要满足的条件,ios,cocoa-touch,uitabbarcontroller,Ios,Cocoa Touch,Uitabbarcontroller,在这种情况下,我需要确保用户在移动到UITabBarController中的另一个选项卡之前完成了某些步骤。因此,如果用户正在做一些事情并点击另一个选项卡,我想显示一个UIAlertView,上面说“在转到另一个选项卡之前,您必须完成这些废话。” 是否可以检查此条件并取消移动到另一个视图控制器?您可以尝试捕获正在移出的视图,并将选项卡栏控制器上选定的索引更改为您希望保留它们的视图: - (void)viewWillDisappear:(BOOL)animated { self.tabBar

在这种情况下,我需要确保用户在移动到
UITabBarController
中的另一个选项卡之前完成了某些步骤。因此,如果用户正在做一些事情并点击另一个选项卡,我想显示一个
UIAlertView
,上面说“在转到另一个选项卡之前,您必须完成这些废话。”


是否可以检查此条件并取消移动到另一个视图控制器?

您可以尝试捕获正在移出的视图,并将选项卡栏控制器上选定的索引更改为您希望保留它们的视图:

- (void)viewWillDisappear:(BOOL)animated {
   self.tabBarController.selectedIndex = 0;
}
您可能会发现这有点不稳定,但根据事件的顺序,快速的google发现,如果您可以将视图控制器设置为UITabBarControllerDelegate,则可以实现:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController

这样你就能更早地抓住它们。您可能会发现在您的应用程序代理中实现此功能最简单,并让它知道(或检查)是否应允许更改。您可以尝试捕获其上的视图,并将选项卡栏控制器上的选定索引更改为您希望保留的视图:

- (void)viewWillDisappear:(BOOL)animated {
   self.tabBarController.selectedIndex = 0;
}
您可能会发现这有点不稳定,但根据事件的顺序,快速的google发现,如果您可以将视图控制器设置为UITabBarControllerDelegate,则可以实现:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController

这样你就能更早地抓住它们。您可能会发现在您的应用程序委托中实现这一点最简单,并让它知道(或检查)是否应该允许更改。

当然可以。我想您的tabbar控制器位于AppDelegate类中。如果是,请将AppDelegate设置为其委托。然后实现以下方法

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
  // place all the checks here
  EditingViewController *editingController = //link to controller where editing is being made.
  if (editingController && editingController.isEditing) {
    //UIAlertView
    return NO;
  }
  return YES;
}

当然可以。我想您的tabbar控制器位于AppDelegate类中。如果是,请将AppDelegate设置为其委托。然后实现以下方法

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
  // place all the checks here
  EditingViewController *editingController = //link to controller where editing is being made.
  if (editingController && editingController.isEditing) {
    //UIAlertView
    return NO;
  }
  return YES;
}