Белый текст в UITextField = Невидимый текст в iPhone копировать / вставить выберите. Фикс? - PullRequest
3 голосов
/ 24 декабря 2009

Если у меня есть белый текст в моем UITextField, окно выбора (при выборе текста) невидимо, потому что фон в маленьком окне также белый.

Есть ли способ это исправить?

Ответы [ 5 ]

4 голосов
/ 02 февраля 2010

Конечно! Цвет фона лупы всегда соответствует свойству backgroundColor текстового поля. (Но не свойство background.) Пример:

textField.textColor = [UIColor whiteColor];
textField.backgroundColor = [UIColor blackColor];

Если для вашего текстового поля абсолютно необходим прозрачный фон, вам придется подделать его - используя фоновое изображение, содержащее графику под текстовым полем. Вы можете сделать это вручную, сделав снимок экрана с интерфейсом и обрезав его, или программно, например:

#import <QuartzCore/CALayer.h>
...
// `view` contains the graphics underneath the text field
UIGraphicsBeginImageContext(textField.bounds.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGPoint origin = [textField convertPoint:textField.bounds.origin toView:view];
CGContextTranslateCTM(context, -origin.x, -origin.y);
[view.layer renderInContext:context];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
textField.background = image;

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

1 голос
/ 21 октября 2012

Я знаю, что это немного старо, но в iOS5, похоже, проблема только для симулятора. Он будет правильно отображаться на устройстве.

1 голос
/ 16 августа 2012

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

@interface FakeBgTextView : UITextView {
    UIColor *_fakeBackgroundColor;
}

- (UIColor *)backgroundColor;
- (void)setFakeBackgroundColor:(UIColor *)color;
@end

@implementation FakeBgTextView
...
- (UIColor *)backgroundColor {
    return _fakeBackgroundColor;
}

- (void)setFakeBackgroundColor:(UIColor *)color {
    [_fakeBackgroundColor release];
    _fakeBackgroundColor = [color retain];
}
...
@end
1 голос
/ 24 декабря 2009

Боюсь, что нет. Проблема существует с самых ранних дней iPhone OS - белый текст также отображается белым на белом фоне в лупе позиционирования курсора. Если это серьезная проблема для вашего приложения, ваши единственные реальные варианты - изменить цвет текста или отправить запрос функции радара в Apple.

0 голосов
/ 02 февраля 2010

Одним из решений, которое я использовал для решения этой проблемы, является изменение цвета текста на a, который будет отображаться в лупе (но может не выглядеть так же хорошо в общем виде) при редактировании, а затем его изменение на лучшее отображение цвета по окончании редактирования.

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

Установите цвет на выделенный цвет, который будет иметь достаточную контрастность в лупе при didBeginEditing, затем измените его обратно на didEndEditing.

Еще один возможный подход, который я использовал в нескольких приложениях.

например.

- (void)textFieldDidBeginEditing:(UITextField *)textField {
  textField.textColor = [UIColor colorWithRed:116.0/255.0 green:160.0/255.0 blue:246.0/255.0 alpha:1.0];
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
  textField.textColor = [UIColor colorWithRed:224.0/255.0 green:224.0/255.0 blue:224.0/255.0 alpha:1.0];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...