В iOS 7 изменение атрибута «цвет оттенка» поля uitext изменит цвет курсора этого текстового поля. В iOS 8, даже когда я меняю глобальный цвет оттенка раскадровки, этого не происходит (objective-c все еще работает в iOS 7). Как это исправить?
Цвет оттенка текстового поля iOS 8
Ответы (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
Это должно быть принято. Я до сих пор не понял, почему это не работает через раскадровку.
- person appsunited; 27.11.2014
попробуйте следующее:
[[self.textField setTintColor:[UIColor blueColor]];
[self.textField setTintAdjustmentMode:UIViewTintAdjustmentModeNormal];
person
George
schedule
28.07.2015
Спасибо. Без настройки
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