Изменение индекса UITabBarButton при применении выбранного изображения - PullRequest
0 голосов
/ 24 июня 2019

В настоящее время я работаю с проблемой при применении выбранного изображения через UITabBarButton.Когда я делаю это, это меняет иерархию UITabBarbutton в пределах tabBar.items.На самом деле понятия не имею, почему это происходит.Публикация кода -

 UIWindow *keyWindow = [[UIApplication sharedApplication]keyWindow];
 UITabBarController *tabBarController =(UITabBarController*)[keyWindow rootViewController];
 UITabBar *tabBar = tabBarController.tabBar;
 UITabBarItem *targetTabBarItem = [[tabBar items] objectAtIndex:1]; // whichever tab-item
 [targetTabBarItem setSelectedImage:image];
 [targetTabBarItem setImage:image];

Я делаю здесь:

Получение изображения с сервера и применение его к определенному изображению UItabBarbutton.Всякий раз, когда я его устанавливаю, он берет UITabbarButton и вставляет в последнюю позицию всех UITabBarButton.

Initial Images

Initial Image

Когда изображение меняется с сервера, его иерархия меняется примерно так- After Effect Image

enter image description here

Здесь мы можем видеть, что изначально порядок кнопок был Tab1, Tab2 и Tab3, апосле изменения выбранного изображения оно было изменено на Tab1, Tab3 и Tab2.Это указывает на то, что выбранный индекс изображения выскакивает и всегда вставляется до последнего в коллекции TabBarButtons.Если я поменяю выбранное изображение с индексом 0 изначально, порядок будет Tab2, Tab3 и Tab1.

Значит, кто-нибудь здесь может дать краткое представление о том, что не так в коде?Извините за длинный пост и заранее спасибо.

Спасибо.

1 Ответ

0 голосов
/ 26 июня 2019

Порядок иерархии представления панели вкладок, отображаемый в отладчике представления, должен быть полностью независимым от свойства tabBar вспомогательного объекта tabBarController, которое содержит массив элементов панели вкладок.

Полагаю, причина того, что вы видите эту настройку упорядочения иерархии представлений, заключается в том, что изменение свойства изображения приведет к его перерисовке или удалению / чтению в иерархию представлений, поэтому он будет последним добавленным элементом. (это не должно влиять на порядок tabBarController.tabBar.items)

То же самое произойдет, если вы просто измените заголовок элемента панели вкладок.

Я установил кнопку, чтобы изменить изображение элемента панели вкладок индекса 1, подобное показанному вами коду, затем отобразил порядок панели вкладок в метке:

- (IBAction)changeTabBarImage:(id)sender {
    UIWindow *keyWindow = [[UIApplication sharedApplication]keyWindow];
    UITabBarController *tabBarController =(UITabBarController*)[keyWindow rootViewController];
    UITabBar *tabBar = tabBarController.tabBar;
    UITabBarItem *targetTabBarItem = [[tabBar items] objectAtIndex:1]; // whichever tab-item
    NSMutableString *tabBarOrder = [[NSMutableString alloc] init];
    for (NSUInteger tabBarIndex = 0; tabBarIndex < [tabBar items].count; tabBarIndex++) {
        [tabBarOrder appendString:[NSString stringWithFormat:@"index: %lu title: %@\n", tabBarIndex, [[tabBar items] objectAtIndex:tabBarIndex].title]];
    }
    self.firstLabel.text = [NSString stringWithString:tabBarOrder];
    UIImage *image = [UIImage imageNamed:@"sync"];
    [targetTabBarItem setSelectedImage:image];
    [targetTabBarItem setImage:image];
}

Единственное когда-либо измененное изображение - это панель вкладок с индексом 1, и порядок расположения tabBarController.tabBar.items остается неизменным, даже если порядок иерархии представления в отладчике представления изменяется (как показано на скриншотах).

https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CocoaViewsGuide/WorkingWithAViewHierarchy/WorkingWithAViewHierarchy.html

Если вы видите что-то другое, я бы порекомендовал добавить дополнительный код, поскольку я не могу воспроизвести проблему только с тем, что вы добавили.

...