我正在处理一个静态库,在项目内部有一个UITabBarController,我需要在视图控制器之间切换。条件是我有UIViewControllers的名称,但不知道它的索引值。我该怎么做。我试着获取视图控制器的数组并找到它的索引,但它给出了错误。
UIStoryboard * storyboard = [[[UIApplication sharedApplication] keyWindow] rootViewController].storyboard;
NSString *ViewtoSwitch =@"home";
UIViewController* myVC = [storyboard instantiateViewControllerWithIdentifier:ViewtoSwitch];
UITabBarController *tabBarController = (UITabBarController *)[[[UIApplication sharedApplication] keyWindow] rootViewController];
NSMutableArray *arr = [[tabBarController viewControllers] mutableCopy];
NSString *stringToSearch = @"home:";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@",stringToSearch];
NSUInteger index = [arr indexOfObjectPassingTest:^(id obj, NSUInteger idx, BOOL *stop) {
return [predicate evaluateWithObject:obj];
}];
[tabBarController setSelectedIndex:index];
但它给出的错误如下:由于未捕获的异常"NSInvalidArgumentException"而终止应用程序,原因:"无法在集合(非集合)中使用in/contains运算符"
NSMutableArray *arr = [[tabBarController viewControllers] mutableCopy];
在之后
迭代arr对象并使用isKindOfClass
来验证是否是您想要的类
我从PKT得到了suggeyion之后的解决方案,下面的代码对我有效。
NSString *ViewtoSwitch =@"home";
UITabBarController *tabBarController = (UITabBarController *)[[[UIApplication sharedApplication] keyWindow] rootViewController];
NSMutableArray *arr = [[tabBarController viewControllers] mutableCopy];
NSMutableArray *array = [[NSMutableArray alloc] init];
for (int i = 0; i < [arr count]; i++) {
[array addObject:NSStringFromClass([[arr objectAtIndex:i] class])];
}
int index = (int)[array indexOfObject:ViewtoSwitch];
[tabBarController setSelectedIndex:index];