Цвет оттенка текстового поля iOS 8

В iOS 7 изменение атрибута «цвет оттенка» поля uitext изменит цвет курсора этого текстового поля. В iOS 8, даже когда я меняю глобальный цвет оттенка раскадровки, этого не происходит (objective-c все еще работает в iOS 7). Как это исправить?


person Jack Solomon    schedule 02.10.2014    source источник


Ответы (3)


Я только что попытался воспроизвести вашу проблему, но как на iOS7.1, так и на iOS8 атрибут tintColor текстового поля работает отлично.

Эта строка кода изменяет цвет курсора текстового поля. Попробуйте это вместо изменения цвета оттенка в раскадровке

textField.tintColor = [UIColor colorWithRed:98.0/255.0f green:98.0/255.0f blue:98.0/255.0f alpha:1.0];

Надеюсь, поможет!

person Niccolò Passolunghi    schedule 02.10.2014
comment
Это должно быть принято. Я до сих пор не понял, почему это не работает через раскадровку. - person appsunited; 27.11.2014

попробуйте следующее:

[[self.textField setTintColor:[UIColor blueColor]];

[self.textField setTintAdjustmentMode:UIViewTintAdjustmentModeNormal];
person George    schedule 28.07.2015
comment
Спасибо. Без настройки self.tintAdjustmentMode = UIViewTintAdjustmentModeNormal; tintColor работать не будет. - person Kamil Powałowski; 30.07.2015

Хотите на самом деле применить тонированный цветовой фильтр ко всему виду, а не просто изменить цвет курсора?

Не смотрите дальше. .tint — неудачное имя, потому что оно никоим образом не подразумевает, что оно регулирует цвет курсора. Естественно, люди, ищущие свойство .tint, скорее всего, пытаются найти способ применить цветовой фильтр ко всему кадру/области своего UIView, UITextView и т.д.

Вот мое решение для вас:

Я сделал макросы для этой цели:

#define removeTint(view) \
if ([((NSNumber *)[view.layer valueForKey:@"__hasTint"]) boolValue]) {\
for (CALayer *layer in [view.layer sublayers]) {\
if ([((NSNumber *)[layer valueForKey:@"__isTintLayer"]) boolValue]) {\
[layer removeFromSuperlayer];\
break;\
}\
}\
}

#define setTint(view, tintColor) \
{\
if ([((NSNumber *)[view.layer valueForKey:@"__hasTint"]) boolValue]) {\
removeTint(view);\
}\
[view.layer setValue:@(YES) forKey:@"__hasTint"];\
CALayer *tintLayer = [CALayer new];\
tintLayer.frame = view.bounds;\
tintLayer.backgroundColor = [tintColor CGColor];\
[tintLayer setValue:@(YES) forKey:@"__isTintLayer"];\
[view.layer addSublayer:tintLayer];\
}

Чтобы использовать, просто позвоните:

setTint(yourView, yourUIColor);
//Note: include opacity of tint in your UIColor using the alpha channel (RGBA), e.g. [UIColor colorWithRed:0.5f green:0.0 blue:0.0 alpha:0.25f];

При снятии оттенка просто звоните:

removeTint(yourView);
person Albert Renshaw    schedule 20.06.2018