Я создал пользовательский UITabBar, который работает очень хорошо, но я ввел изменение в навигацию, и теперь у меня возникают серьезные проблемы. Вот что у меня есть:пользовательский TabBar теряет изображения TabBarItem
Общие настройки
TabBarController
NavbarController1 - TabBarItem1
Links to: PeopleView
NavbarController2 - TabBarItem2
Links to: ContentView
NavbarController3 - TabBarItem3
Links to: ContentView //Same VC as TabBaritem 2.
App Делегат - В моем методе didFinishLaunchingWithOptions я называю метод customizeTabBar следующим
-(void) customizeTabBar
{
UITabBarController *tabVC = (UITabBarController *) self.window.rootViewController;
//Load Navigation Bar images
NSArray *unSelectedImages = [[NSArray alloc] initWithObjects:@"image1.jpg", @"image2.jpg", @"image3.jpg", @"image4.jpg", @"image5.jpg", nil];
NSArray *selectedImages = [[NSArray alloc] initWithObjects:@"image1_on.jpg", @"image2_on.jpg", @"image3_on.jpg", @"image4_on.jpg", @"image5_on.jpg", nil];
NSArray *items = tabVC.tabBar.items;
for (int idx = 0; idx < items.count; idx++)
{
UITabBarItem *barItem = [items objectAtIndex:idx];
barItem.tag = idx;
UIImage *selectedImage = [UIImage imageNamed:[selectedImages objectAtIndex:idx]];
UIImage *unSelectedImage = [UIImage imageNamed:[unSelectedImages objectAtIndex:idx]];
UIEdgeInsets inset = {
.top = 10,
.left = 0,
.bottom = -10,
.right = 0
};
barItem.imageInsets = inset;
[barItem setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:unSelectedImage];
}
До сих пор это работает прекрасно , .
Вот где возникает проблема того, чтобы получить мой TabBarItem3 связать с ContentView, я осуществил следующий код в моем TabBarClass:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if (viewController.tabBarItem.tag == 1 || viewController.tabBarItem.tag == 2)
{
// Validating if is necesarry to replace the TabBarController.ViewControllers
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
MediaList *mediaView = [storyboard instantiateViewControllerWithIdentifier:@"SB_MediaList"];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:mediaView];
NSMutableArray *viewsArray = [NSMutableArray arrayWithArray:self.viewControllers];
if (viewController.tabBarItem.tag == 1)
{
//Setting the specfic data for my instance for tabBarItem 1
NSLog(@"Here we are in 1");
[mediaView setContent:@"Personalized content/data for TabBarItem 1"];
}
else if (viewController.tabBarItem.tag == 2)
{
//Setting the specfic data for my instance for tabBarItem 2
NSLog(@"Here we are in 2");
[mediaView setContent:@"Personalized content/data for TabBarItem 2"];
}
[viewsArray replaceObjectAtIndex:viewController.tabBarItem.tag withObject:navigationController];
self.viewControllers = viewsArray;
}
}
После выполнения этого кода, я теряю изображение связанные с моей настраиваемой панелью вкладок для элементов 2 или 3 (в зависимости от того, что я выбираю).
UPDATE
Итак, я переместил вкладку метод бар настройки из моего делегата и в класс maintabbar и я называю его viewdidload а я Мех спрятанный didselectviewcontroller. Это, похоже, решает проблему с отсутствующими изображениями, но создало плохой побочный эффект мерцания на экране, когда я нажимаю любой из элементов шланга. Я пробовал различные комбинации удаления его из метода viewdidload, как мы это сделаем, но все равно не повезло.
Я принял ваше руководство и переместил все. Мне нравится дизайн лучше, но, к сожалению, проблема мерцания все еще существует. См. Http://stackoverflow.com/q/19123984/2804909 – mday