Фоновое изображение UITextView

Как установить фоновое изображение на UITextView?


person Ilya Suzdalnitski    schedule 17.04.2009    source источник


Ответы (8)


У вас может быть UIImageView, содержащий фоновое изображение, и UITextView в качестве братьев и сестер, затем в Interface Builder переместите текстовое представление, чтобы оно перекрывало представление изображения (или добавьте их оба в одно и то же родительское представление, если делаете это программно). Вам также необходимо убедиться, что текстовое представление не является непрозрачным, и задать для него непрозрачность фона 0%.

person duncanwilcox    schedule 17.04.2009
comment
На мой взгляд, это правильный ответ, в методе Oxigen, если фоновое изображение имеет нижнюю границу, пользователь увидит, как оно прокручивается вместе с текстовым представлением при вводе текста. - person bpapa; 01.06.2009
comment
Итак, как именно вы добавляете родного элемента в UIImageView? - person jacobronniegeorge; 12.04.2013
comment
@jacobronniegeorge просто добавьте UIImageView и UITextView в представление (таким образом, они являются братьями и сестрами, например, дочерними элементами основного представления), а затем используйте ограничения слева/справа/сверху/снизу для достижения наложения. - person Pixel; 11.04.2019

@durai: Ваше изображение имеет ограничение по высоте, после которого появится белый фон, если после прокрутки вниз появится пустой фон, вы можете повторить то же изображение.

Это может быть полезно:

textView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed: @"Image.png"]];
person Zaraki    schedule 20.01.2011
comment
голосование за - не уверен, почему кто-то понизил бы это; это отличное решение. - person TomSwift; 03.03.2011
comment
И этот ответ, и ответ @duncanwilcox хороши. Это зависит от того, хотите ли вы, чтобы ваш фон прокручивался или нет. - person memmons; 04.04.2012
comment
Да, это действительно хорошее решение, и считается элегантным. +1, не вижу причины для понижения. - person ; 07.07.2012

Только одно уточнение: при проверке ответа №9 от @oxigen я обнаружил, что эта строка:

UIImageView *imgView = [[UIImageView alloc]initWithFrame: textView.frame];

Относительно textView.frame. Таким образом, ваши значения x и y должны быть равны 0,0, если вы хотите, чтобы они полностью перекрывались, что означает, что вы хотите что-то вроде:

UIImageView *imgView = [[UIImageView alloc]initWithFrame:textView.bounds];
person Gustavo    schedule 11.11.2010
comment
Или с меньшим количеством ввода: `(...) initWithFrame:textView.bounds` - person ; 07.07.2012

Я нашел один простой способ установить фоновое изображение.

ч файл

@interface FNTextView : UITextView

@end

м файл

...
- (void)drawRect:(CGRect)rect
{
    [self.bgImage drawInRect:rect];

    [super drawRect:rect];
}

- (void)initHandler
{
    self.bgImage = [[UIImage imageNamed:@"textview_bg"] resizableImageWithCapInsets:UIEdgeInsetsMake(4, 4, 4, 4)];
}
...
person Мельник Леонид    schedule 14.12.2012

Для плиточного фона мне нравится это решение

UIImage *patternImage = [UIImage imageNamed:@"image.png"];
UIColor* color = [UIColor colorWithPatternImage:patternImage];
textView.backgroundColor = color;
person Remizorrr    schedule 12.03.2012

Не уверен, но вы можете попробовать следующее, предполагая, что ваше фоновое изображение обрабатывается UIImageView:

[myTextView addSubview: myImageView];

Обратите внимание, что вам может потребоваться изменить значение альфа/непрозрачных свойств вашего UITextView.

С уважением.

person Massimo Cafaro    schedule 17.04.2009

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

UITextView *textView = [[UITextView alloc]initWithFrame: window.frame];
textView.text = @"Some text...";

UIImageView *imgView = [[UIImageView alloc]initWithFrame: textView.frame];
imgView.image = [[UIImage imageNamed: @"image"] resizableImageWithCapInsets:UIEdgeInsetsMake(8, 8, 8, 8)];

[textView addSubview:imgView];
[textView sendSubviewToBack:imgView];

[window addSubview:textView];

Ознакомьтесь с документацией по resizableImageWithCapInsets:(UIEdgeInsets)capInsets.

person Mateus    schedule 20.03.2013

person    schedule
comment
Я думаю, что ответ Данканвилкокса предпочтительнее, поскольку метод, описанный в этом ответе, заставит фоновое изображение прокручиваться вместе с содержимым по мере ввода пользователем. - person bpapa; 01.06.2009
comment
Не забудьте освободить выделенные объекты. после: [textView addSubview: imgView]; добавить: [выпуск imgView]; добавить в конец: [релиз textView]; - person ma11hew28; 24.07.2010
comment
И при желании для лучшего качества изображения сделайте изображение масштабируемым! - person Mateus; 20.03.2013