Как изменить по умолчанию серый цвет uitabbaritem в контроллере uitabbar? - PullRequest
2 голосов
/ 05 января 2011

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

любая помощь оценит!

Ответы [ 3 ]

4 голосов
/ 05 января 2011

Вам нужно будет построить свой собственный контроллер. В документации Apple по этому вопросу "Этот класс [UITabBarController] не предназначен для создания подклассов". В документах UITabBarItem говорится, что при предоставлении изображения для панели вкладок «Изображения, отображаемые на панели вкладок, получены из этого изображения». Таким образом, любое изображение, которое вы предоставляете панели вкладок, будет изменено, чтобы оно соответствовало «нормальному» виду изображения панели вкладок.

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

ИМХО, это похоже на большую работу за небольшую выгоду.

0 голосов
/ 05 января 2011

Вы можете наследовать от UITabBar и переопределить метод drawRect.Ниже приведен пример того, как он окрашен в коричневый цвет

- (void)drawRect:(CGRect)rect 
{
    // Drawing code
    float baseComponents[] = { 78 / 255.0, 30 / 255.0, 0/ 255.0, 1.0 };

    // Get current context
    CGContextRef context = UIGraphicsGetCurrentContext();

    // Fill full rectangle
    CGContextSetRGBFillColor(context, baseComponents[0], baseComponents[1], baseComponents[2], baseComponents[3]);
    CGContextFillRect(context,rect);

    // Draw light line on top
    CGContextSetRGBStrokeColor(context, baseComponents[0] + (67/255.0), baseComponents[1] + (67/255.0), baseComponents[2] + (67/255.0),  baseComponents[3]);
    CGContextMoveToPoint(context, 0, 1);
    CGPoint points[] = { CGPointMake(0,1.5),CGPointMake(rect.size.width,1.5) };
    CGContextStrokeLineSegments(context, points , 2);

    // Create gradient
    CGColorSpaceRef myColorspace;
    CGGradientRef myGradient;
    size_t num_locations = 2;
    CGFloat locations[2] = { 0.0, 1.0 };
    CGFloat components[8] = { baseComponents[0] + (46/255.0), baseComponents[1] + (46/255.0), baseComponents[2] + (46/255.0),  baseComponents[3],  // Start color
    baseComponents[0] + (21/255.0), baseComponents[1] + (21/255.0), baseComponents[2] + (21/255.0),  baseComponents[3] }; // End color

    myColorspace = CGColorSpaceCreateDeviceRGB();
    myGradient = CGGradientCreateWithColorComponents (myColorspace, components,locations, num_locations);

    // Draw gradient
    CGContextDrawLinearGradient(context, myGradient, CGPointMake(0, 2), CGPointMake(0,rect.size.height/2), 0);

    // Clean up
    CGColorSpaceRelease(myColorspace);
    CGGradientRelease(myGradient);

}

Чем в Интерфейсном Разработчике установить свой собственный класс для TabBar UITabBarController в Identity Inspector.

0 голосов
/ 05 января 2011

извлеките https://github.com/xhan/PlutoLand и запустите его.

вы можете найти пользовательский класс PLTabBarController, который позволит вам настраивать ваши TabBarItems там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...