Добавьте эту категорию в свой проект. Это заставит элементы панели вкладок использовать исходное изображение в качестве отключенного состояния вместо применения к ним серого градиента:
@implementation UItabBarItem (CustomUnselectedImage)
- (UIImage *)unselectedImage
{
return self.image;
}
@end
Может показаться, что он использует частные API, но я видел, что он использовался несколько раз в утвержденных приложениях. На самом деле это не вызов частного метода, просто переопределение одного.
Если вам нужно указать разные изображения для выбранного и невыбранного изображения, лучше всего использовать свойство tag UITabBarItem и оператор switch, например:
@implementation UItabBarItem (Custom)
- (UIImage *)selectedImage
{
switch (self.tag)
{
case 1:
return [UIImage imageNamed:@"tab-selected1.png"];
case 2:
return [UIImage imageNamed:@"tab-selected2.png"];
etc...
}
}
- (UIImage *)unselectedImage
{
switch (self.tag)
{
case 1:
return [UIImage imageNamed:@"tab-unselected1.png"];
case 2:
return [UIImage imageNamed:@"tab-unselected2.png"];
etc...
}
}
@end
Тогда в конструкторе интерфейсов не беспокойтесь о настройке изображений элементов панели вкладок, так как они будут просто игнорироваться. Вместо этого установите их теги так, чтобы они соответствовали изображениям, которые вы указали в выражениях switch.
Обратите внимание, что если в вашем приложении несколько панелей вкладок, и вы не хотите, чтобы все они были переопределены таким образом, вы можете определить эти методы в подклассе UITabBarItem, а не в качестве категории. Затем вы можете установить класс элементов панели вкладок в вашем nib-файле в качестве своего пользовательского подкласса вместо обычных UITabBarItems, и это затронет только те из них.
EDIT:
Обратите внимание, что в iOS 5 есть лучший способ сделать это с помощью API UIAppearance. Эта техника все еще должна работать, но кто знает, может ли Apple начать бороться с ней сейчас, когда есть официально поддерживаемый подход. Лучше использовать новый метод, если вам действительно не нужна поддержка iOS 4.