Я объясню, как это сделать программно. ПРИМЕЧАНИЕ. При этом используется ARC, поэтому при необходимости может потребоваться вставить вызовы удержания / разблокировки.
Вы используете tag
свойство UITabBarItem
для сортировки. Для каждого UIViewController
, который вы добавляете к UITabBarController
, убедитесь, что у каждого есть уникальный tag
.
- (id)init
{
self = [super init];
if (self) {
self.tabBarItem.tag = 0;
self.tabBarItem.image = <image>;
self.tabBarItem.title = <title>;
}
return self;
}
Предположительно, вы бы просто использовали их порядок сортировки по умолчанию для их тегов, поэтому все, что вы используете в качестве исходного контроллера первого вида, будет 0, а затем 1, 2, 3 и т. Д.
Установите свои контроллеры UIViewControllers в didFinishLaunchingWithOptions
AppDelegate, как вы это обычно делаете, убедившись, что вы создаете их экземпляры в «порядке по умолчанию». При этом добавьте их в экземпляр NSMutableArray.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.delegate = self;
NSMutableArray *unsortedControllers = [NSMutableArray array];
UIViewController *viewOne = [[UIViewController alloc] init];
[unsortedControllers addObject:viewOne];
UIViewController *viewTwo = [[UIViewController alloc] init];
[unsortedControllers addObject:viewTwo];
...
После того, как все они будут созданы и добавлены в массив, вы проверите, настроил ли пользователь свой заказ, запросив NSUserDefaults
. В значениях по умолчанию вы будете хранить массив пользовательских настраиваемых порядков вкладок. Это будет массив NSNumbers (как это создается, объясняется в последнем фрагменте кода). Используйте их для создания нового «отсортированного» массива контроллеров представления и передачи его контроллеру панели вкладок. Если они не изменили порядок, по умолчанию вернется ноль, и вы можете просто использовать несортированный массив.
...
NSArray *tabBarOrder = [[NSUserDefaults standardUserDefaults] arrayForKey:@"tabBarOrder"];
if (tabBarOrder)
{
NSMutableArray *sortedControllers = [NSMutableArray array];
for (NSNumber *sortNumber in tabBarOrder)
{
[sortedControllers addObject:[unsortedControllers objectAtIndex:[sortNumber intValue]]];
}
self.tabBarController.viewControllers = sortedControllers;
} else {
self.tabBarController.viewControllers = unsortedControllers;
}
[self.window setRootViewController:self.tabBarController];
[self.window makeKeyAndVisible];
return YES;
}
Чтобы создать заказной порядок сортировки, используйте метод делегата UITabBarController:
- (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed
{
NSMutableArray *tabOrderArray = [[NSMutableArray alloc] init];
for (UIViewController *vc in self.tabBarController.viewControllers)
{
[tabOrderArray addObject:[NSNumber numberWithInt:[[vc tabBarItem] tag]]];
}
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithArray:tabOrderArray] forKey:@"tabBarOrder"];
[[NSUserDefaults standardUserDefaults] synchronize];
}