UITabBarItem Изображение исчезает при выборе Xcode 6 Beta
Довольно неожиданно для развития, однако бета-версии Xcode дают мне немного головную боль (Xcode 6 beta 5/iOS 8).
Найдены некоторые ответы, но в основном связанные с Xcode 5 и ниже.
Все работает нормально, однако выбранный значок/контроллер просмотра исчезает. В Xcode 5-4 объекты изображения даже не появлялись, предоставляя следующее сообщение об ошибке. Теперь они делают, однако сообщение об ошибке все еще выполняется.
Скриншот:
![enter image description here]()
CUICatalog: Недействительное имя актива: (null) 2014-08-12 15: 16: 26.521 TheApp [5275: 3231837] CUICatalog: Недопустимое имя актива прилагается: (null) 2014-08-12 15: 16: 26.521 TheApp [5275: 3231837] Возможно не загружать изображение "(null)", на которое ссылается нить в комплекте с идентификатор "YourCompnay.TheApp"
Я ломаю голову, пытаясь понять, связаны ли это моими соединениями/изображениями или просто ошибкой Xcode beta.
Задать необходимую помощь и дать четкое объяснение. ELI5.
Любая помощь будет оценена по достоинству. Кажется, я не вижу ничего конкретного, связанного с этой ошибкой.
Ответы
Ответ 1
Я почти в том же месте, что и вы. Как и вы, мои "невыделенные" вкладки будут отображаться хорошо, но для моих выбранных изображений вкладок они не будут присутствовать, и я получаю ошибку "не могу загрузить null image...".
Я назначал изображения внутри раскадровки IB... возможно, это то, что вы делали тоже. В любом случае, внутри IB в Attributes Inspector для UITabBarItem есть два разных поля. Один из них находится в разделе "Элемент панели вкладок", и он называется "Выбранное изображение". Другая часть находится в разделе "Пункт" Бар "и называется" Изображение ". Чтобы быть ясным (повторение моего первого абзаца, но с точки зрения IB), у меня были" правильные "изображения, которые я сохранил в своих .xcassets, назначенных каждому из этих полей Image/Selected_Image (каждое изображение несколько отличалось от другого, чтобы различать выбор). Тот, который у меня был в поле" Изображение", появится, и тот, который у меня был в поле "Выбранное изображение", не будет.
Если я поместил "хороший" из поля "Изображение" в поле "Выбранное изображение", я все равно получил бы ошибку, которая для меня не имела смысла.
ОДНАКО, если я поместил свое "невыбранное" изображение в поле "Элемент" Бар "- > " Изображение "и оставил элемент" Панель табуляции "- > " Выбранное изображение пустым ", ТОГДА одно изображение будет использоваться в обоих местах И было бы выделено синим если выбрано. Это не дало мне незначительного изменения изображения, которое я хотел (так как мой обзор Apple Docs для элемента кнопки бара показал, что у меня должно быть" более толстые линии "на моем изображении для выбранного элемента), он, по крайней мере, дает мне изображение для выбранной вкладки. Надеюсь, это также поможет вам.
Ответ 2
Ответ Yjo-jo на самом деле не является решением этой проблемы. Это делает панель вкладок использующим невыбранное изображение как для обычного, так и для выбранного состояний, но не позволяет использовать другое изображение для выбранного состояния, как рекомендовано в документах Apple.
Ошибка в том, что поле "выбранное изображение" для элементов панели табуляции в раскадровках просто не работает, и это по-прежнему проблема с Xcode 6.0.1. Я использую изображения, непосредственно включенные в мои ресурсы приложения, а не .xcassets, и я испытываю ту же проблему. Изображения существуют в моем приложении, они появляются в раскрывающемся списке при редактировании моей раскадровки, и все же я получаю ту же ошибку Could not load the "(null)" image ...
и пустое выбранное изображение.
Моим решением было добавить это в мой элемент панели вкладок (контроллер просмотра) viewWillAppear
:
[[self tabBarItem] setSelectedImage:[UIImage imageNamed:@"(selected image file)"]];
Однако при этом я обнаружил, что размер изображения слегка менялся при выборе/невыбранном изображении, хотя мои изображения были одного размера. Это может быть связано с тем, что размер изображений для элементов панели табуляции предварительно определен каким-то определенным образом, и мы с ними сталкиваемся так же, как их собираемся нарисовать. Это небольшая проблема, но этого было достаточно, чтобы меня укусить, поэтому, чтобы добиться их совершенства, я удалил предыдущий код и добавил его в свой viewWillAppear
метод контроллера таблиц :
[(UITabBarItem*)[[[self tabBar] items] objectAtIndex:n] setImage:[UIImage imageNamed:@"(unselected image file)"]];
[(UITabBarItem*)[[[self tabBar] items] objectAtIndex:n] setSelectedImage:[UIImage imageNamed:@"(selected image file)"]];
Где n
- индекс элемента панели табуляции. (начиная с 0)
Это некрасиво, но оно работает. Насколько я знаю, поле "выбранное изображение" просто явно не работает в Xcode 6.
Ответ 3
Определение selectedImage
в User Defined Runtime. Атрибуты, такие как этот ответ, работали для меня.
Ответ 4
Похоже на ошибку в UIKit, я уже подал радар.
Чтобы сделать эту работу, вы должны добавить значки вручную из своего кода контроллера просмотра. Есть несколько вещей, которые нужно сделать:
- Определите, какой
UITabBarItem
принадлежит вашему контроллеру вида.
YourViewController.m:
-(UITabBarItem *)tabBarItem {
return self.tabBarController.tabBar.items[[self.tabBarController.viewControllers indexOfObject:self.navigationController]];
}
Примечание self.navigationController
, вы должны просто self
, если нет контроллера режима просмотра, который обертывает ваш обычный контроллер просмотра.
- Изменить значки
Функция YourViewController.m -awakeFromNib:
:
[self.tabBarItem setImage:[UIImage imageNamed:@"RegularImage"]];
[self.tabBarItem setSelectedImage:[UIImage imageNamed:@"SelectedImage"]];
Работает для меня, должен работать и на вас. Это немного взломать, но настолько изящно, насколько это возможно.
Ответ 5
Я видел эту проблему в нескольких версиях XCode. Теперь на 6.3 beta 3 я, наконец, исправил его.
В моем случае я решил это, выполнив две вещи:
- Для каждого элемента панели вкладок в интерфейсе Builder удалите поле "Выбранное изображение" (это может быть и не нужно).
![enter image description here]()
- Щелкните правой кнопкой мыши на раскадровке и выберите "Открыть как → Исходный код". Найдите "tabBarItem". Просмотрите каждый элемент. Они должны выглядеть примерно так:
![enter image description here]()
В моем случае были дублированные/потерянные элементы tabBarItem, которые оказались неуместными и с плохими/старыми настройками. Прокомментируйте любые элементы, которые не соответствуют вашим настройкам в IB. Очистите и перестройте приложение и посмотрите, исправлены ли вы, как я.
Ответ 6
Нажмите TabButtonItem и перейдите к инспектору атрибутов. Вы увидите 2 раздела: Элемент панели вкладок и пункт "Бар". Вероятно, вы заполнили выбранное поле изображения под элементом "Панель вкладок" и поле "Изображение" под элементом "Бар". Необходимо оставить поле Элемент панели вкладок: выбранное изображение пустым. Он будет работать тогда.
Ответ 7
Для кого-либо другого, страдающего от таких же досадных ошибок: "CUICatalog: недопустимое имя актива: (null) 2014-08-12 15: 16: 26.521 TheApp [5275: 3231837] CUICatalog: Недействительное имя актива: (null) 2014-08-12 15: 16: 26.521 TheApp [5275: 3231837] Не удалось загрузить" (нулевое) "изображение, на которое ссылается нить в комплекте"... Попробуйте выбрать "Изображение" из раздела "Элемент панели" Инспектор атрибутов для установки изображения. Я не совсем уверен, какая разница, но выпадающее меню "Выбранное изображение" раздела "Элемент панели вкладок" вызывает эту ошибку и не работает.
Ответ 8
Здесь решение, это очень хорошо работало для меня.
- Выберите tabBarItem и установите системный элемент: пользовательский и выбранный. Изображение: пустое в инспекторе атрибутов.
- Перейдите в Инспектор удостоверений и удалите путь к ключу, который указывает любое изображение.