UISegmentcontrol появления, вызывающие проблемы - PullRequest
1 голос
/ 07 декабря 2011

Мне нужна помощь в появлении сегмента UIS, я установил это в моем приложении делегата, все работает отлично.

Пока я не добавлю этот код, чтобы изменить цвет выбранного сегмента, это вызывало проблемы.

я вызвал IBAction, когда viewDidLoad.

это должно показать это

enter image description here

но вместо этого он показывает это, я знаю, это проблемы с внешним видом, но теперь я не уверен, что это можно исправить ... когда я комментирую коды появления, это будет первое изображение.

enter image description here

AppDelegate

   //normal segment
    [[UISegmentedControl appearance] setTitleTextAttributes:
     [NSDictionary dictionaryWithObjectsAndKeys:
      [UIFont fontWithName:@"Rokkitt" size:20.0],UITextAttributeFont,
      [UIColor colorWithRed:75.0/255.0 green:75.0/255.0 blue:75.0/255.0 alpha:1.0], UITextAttributeTextColor, 
      [UIColor clearColor], UITextAttributeTextShadowColor,
      [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset,
      nil] forState:UIControlStateNormal];


    //selected segment
    [[UISegmentedControl appearance] setTitleTextAttributes:
     [NSDictionary dictionaryWithObjectsAndKeys:
      [UIFont fontWithName:@"Rokkitt" size:20.0],UITextAttributeFont,
      [UIColor whiteColor], UITextAttributeTextColor, 
      [UIColor clearColor], UITextAttributeTextShadowColor,
      [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset,
      nil] forState:UIControlStateHighlighted];

IBAction, звонок

// Get number of segments
    int numSegments = [infoSegment.subviews count];

    // Reset segment's color (non selected color)
    for( int i = 0; i < numSegments; i++ ) {
        // reset color
        [[infoSegment.subviews objectAtIndex:i] setTintColor:[UIColor colorWithRed:196.0/255.0 green:223.0/255.0 blue:155.0/255.0 alpha:1]];
    }

    // Sort segments from left to right
    NSArray *sortedViews = [infoSegment.subviews sortedArrayUsingFunction:compareViewsByOrigin context:NULL];

    // Change color of selected segment
    [[sortedViews objectAtIndex:infoSegment.selectedSegmentIndex] setTintColor:[UIColor colorWithRed:51.0/255.0 green:166.0/255.0 blue:85.0/255.0 alpha:1]];
        // Remove all original segments from the control
    for (id view in infoSegment.subviews) {
        [view removeFromSuperview];
    }

    // Append sorted and colored segments to the control
    for (id view in sortedViews) {
        [infoSegment addSubview:view];
    }

Ответы [ 2 ]

2 голосов
/ 14 декабря 2011

хороший способ подкрасить отдельные сегменты, я искал что-то подобное. Но теперь мне интересно, если это "законный" способ ...

с:

[[infoSegment.subviews objectAtIndex:i] setTintColor:[UIColor colorWithRed:196.0/255.0 green:223.0/255.0 blue:155.0/255.0 alpha:1]];

кажется, что вы используете "личное" свойство "tintColor" отдельных элементов в UISegmentedControl, официально не объявленное яблоком (оно объявляется просто свойством "tintColor" всего UISegmentedControl, затем яблоко использует его для раскраски 2 по-разному элементы, выбранные один и другой).

Итак, ваш метод действительно может работать, и я собираюсь использовать его ... но Apple может отклонить ваше приложение, если оно действительно считается методом частного сеттера ... Вы когда-нибудь использовали его в приложении, одобренном для iStore?

1 голос
/ 07 декабря 2011

Похоже, что приведенный выше код только устанавливает внешний вид для UIControlStateNormal, вам также нужно установить внешний вид для UIControlStateSelected.

...