web-dev-qa-db-fra.com

Image d'arrière-plan UITextView

Comment configurer une image d'arrière-plan sur UITextView?

37
Ilya Suzdalnitski

Vous pouvez avoir un UIImageView contenant l'image d'arrière-plan et le UITextView en tant que frères et sœurs, puis dans Interface Builder déplacer la vue texte pour chevaucher la vue image (ou les ajouter à la même vue parent si vous le faites) par programme). Vous devez également vous assurer que la vue texte n'est pas opaque et lui donner un % d'opacité en arrière-plan.

72
duncanwilcox
UITextView *textView = [[UITextView alloc]initWithFrame: window.frame];
textView.text = @"text\n text\n text";
UIImageView *imgView = [[UIImageView alloc]initWithFrame: textView.frame];
imgView.image = [UIImage imageNamed: @"myImage.jpg"];
[textView addSubview: imgView];
[textView sendSubviewToBack: imgView];
[window addSubview: textView];
45
oxigen

@ durai: Votre image a une limite de hauteur après laquelle un fond blanc apparaîtra si un fond vide apparaît après qu'il défile vers le bas, vous pouvez répéter la même image.

Cela pourrait être utile:

textView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed: @"Image.png"]];
41
Zaraki

Juste une précision, en essayant la réponse # 9 de @ oxigen, j'ai découvert que cette ligne:

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

Est relatif à textView.frame. Ainsi, vos valeurs x et y doivent être 0,0 si vous voulez qu'elles se chevauchent complètement, ce qui signifie que vous voulez quelque chose comme:

UIImageView *imgView = [[UIImageView alloc]initWithFrame:textView.bounds];
11
Gustavo

J'ai trouvé une méthode simple pour définir l'image d'arrière-plan.

fichier h

@interface FNTextView : UITextView

@end

fichier m

...
- (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)];
}
...
[txtView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"image.png"]]];
5
Mosib Asad

Pour le fond carrelé, j'aime cette solution

UIImage *patternImage = [UIImage imageNamed:@"image.png"];
UIColor* color = [UIColor colorWithPatternImage:patternImage];
textView.backgroundColor = color;
2
Remizorrr
UITextView *textView=[[UITextView alloc]initWithFrame: CGRectMake(20, 20, 40, 40)];
textView.text = @"this is a test \n this is test \n this is a test";
UIImageView *img = [[UIImageView alloc]initWithFrame: textView.frame];
img.image = [UIImage imageNamed: @"image.png"];
[self.view addSubview:textView];
[self.view insertSubview:img belowSubview:textView];
1
Arash Zeinoddini

Les réponses de @dulcanwilcox et @oxigen fonctionnent toutes les deux, mais un ajout serait de rendre l'image d'arrière-plan redimensionnable, au cas où l'image serait utilisée pour montrer une sorte de bordure.

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];

Consultez la documentation pour resizableImageWithCapInsets: (UIEdgeInsets) capInsets .

1
Mateus

Pas sûr, mais vous pouvez essayer ce qui suit, en supposant que votre image d'arrière-plan est gérée par un UIImageView:

[myTextView addSubview: myImageView];

Notez que vous devrez peut-être modifier la valeur des propriétés alpha/opaques de votre UITextView.

Sincères amitiés.

1
Massimo Cafaro