Не уверен, что вы подразумеваете под "раскруткой", переходя к панели вкладок, но если вы хотите предотвратить изменение вкладки, для этого есть функция делегата на UITabBarController
.
Добавьте протокол в класс панели вкладок.
@interface YourTabbarViewController () <UITabBarControllerDelegate>
@end
Назначьте делегата, а затем реализуйте функцию.
@implementation YourTabbarViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.delegate = self;
}
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
if (preventTabChange)
return NO;
return YES;
}
UPDATE
ОК, при условии, что вы настроили соответствующие детали, как на этом рисунке, и хотите запретить раскрутку от B до A, если выполняются определенные условия. Мое решение, как описано выше, будет работать.
Поскольку вы будете получать запрос / уведомление всякий раз, когда Navigation Controller собирается стать активным, вы можете создать свой собственный подкласс этого класса, в котором будет храниться любая информация, необходимая вам для принятия решения о том, следует ли ему разрешить показывать или раскручивать с контроллера подвид. В этом случае ваша профилактика может выглядеть следующим образом (расширение shouldSelectViewController
выше):
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
if ([viewController isKindOfClass:[YourNavigationController class]]) {
if ([(YourNavigationController *)viewController preventUnwind])
return NO;
}
return YES;
}
Обратите внимание, что я специально выбрал preventUnwind
в качестве флага в вашем пользовательском классе, чтобы сказать, что делать. По умолчанию это значение будет NO
, когда вы перемещаете в контроллер вида и, таким образом, разрешаете это.
Не забудьте установить YourTabbarViewController
в качестве класса для Controller View Tabbar и YourNavigationController
в качестве Navigation Controller на рисунке.