Настройка цветов UISegmentedControl

Я хочу, чтобы путь к изображению был отрисован под ресурсами

blockquote>

Ресурс для рисования - это файл на вашем компьютере разработчика. Это не файл на устройстве. На устройстве нет пути к нему.

я предоставляю некоторый фрагмент кода

blockquote>

В Android нет схемы drawable. Это также не путь к изображению.

Если для вашего Card требуется Uri, вы можете попробовать android.resource как схему .

24
задан Honey 25 June 2019 в 14:08
поделиться

3 ответа

UISegmentedControl имеет свойство tintColor - это позволяет вам изменить цвет элемента управления, но не общий «стиль» (закругленная, скошенная форма):

segmentedControl.tintColor = [UIColor blueColor];

Что касается создания UIImages «на лету» вы можете создать CGContext, сделать любой рисунок, который вам нужен в этом контексте (включая строки), а затем получить UIImage из CGImage контекста:

CGContextRef drawContext = CGBitmapContextCreate(<many parameters>);
//do drawing here
CGImageRef finalImage = CGBitmapContextCreateImage(drawContext);
UIImage *cellImage = [UIImage finalImage];

Обратите внимание, что если вы используете код вроде UIView.appearance (). TintColor = .myColor (или эквивалент в ObjC), скорее всего, эффекта не будет.

21
ответ дан 28 November 2019 в 22:34
поделиться

Я хотел добиться чего-то похожего - установить цвет фона выбранного сегмента на один цвет, в то время как «контур» остальных сегментов был другого цвета.

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

- (void)layoutSubviews {
    [super layoutSubviews];
    [self updateSegmentColors];
}
-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesEnded:touches withEvent:event];
    [self updateSegmentColors];
}
- (void)updateSegmentColors {
    NSArray* segments = [self.subviews sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
        // UISegmentedControl segments use UISegment objects (private API). But we can safely cast them to UIView objects.
        float v1 = ((UIView *)obj1).frame.origin.x;
        float v2 = ((UIView *)obj2).frame.origin.x;
        if (v1 < v2) return NSOrderedAscending;
        else if (v1 > v2) return NSOrderedDescending;
        else return NSOrderedSame;
    }];
    for (int i=0; i<segments.count; i++) {
        if (i == self.selectedSegmentIndex) {
            [segments[i] setTintColor:[UIColor redColor]];
        } else {
            [segments[i] setTintColor:[UIColor grayColor]];
        }
    }
}
1
ответ дан 28 November 2019 в 22:34
поделиться

Выбор решения

Xcode 11

для раскадровки управление и несколько параметров цвета теперь доступен. Если Вам нужно дальнейшее улучшение - проверяют Определяемые пользователем Атрибуты времени выполнения.

image2

image1

0
ответ дан 28 November 2019 в 22:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: