Pergunta
Eu quero ter uma fina borda cinza em torno de um UITextView
. Passei pela documentação da Apple, mas não consegui encontrar nenhuma propriedade lá. Por favor ajude.
Solução
#import <QuartzCore/QuartzCore.h>
....
// typically inside of the -(void) viewDidLoad method
self.yourUITextView.layer.borderWidth = 5.0f;
self.yourUITextView.layer.borderColor = [[UIColor grayColor] CGColor];
Outras dicas
Adicione o seguinte para cantos arredondados:
self.yourUITextview.layer.cornerRadius = 8;
Aqui está o código que usei, para adicionar uma borda ao redor do meu TextView
Controle chamado "tbComments":
self.tbComments.layer.borderColor = [[UIColor grayColor] CGColor];
self.tbComments.layer.borderWidth = 1.0;
self.tbComments.layer.cornerRadius = 8;
E aqui está o que parece:
Mole-mole.
Eu adiciono UIImageView
Como uma subjeconia do UITextView
. Isso corresponde à fronteira nativa em um UITextField
, incluindo o gradiente de cima para baixo:
textView.backgroundColor = [UIColor clearColor];
UIImageView *borderView = [[UIImageView alloc] initWithFrame: CGRectMake(0, 0, textView.frame.size.width, textView.frame.size.height)];
borderView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
UIImage *textFieldImage = [[UIImage imageNamed:@"TextField.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(15, 8, 15, 8)];
borderView.image = textFieldImage;
[textField addSubview: borderView];
[textField sendSubviewToBack: borderView];
Essas são as imagens PNG que eu uso e uma representação JPG:
Funciona muito bem, mas a cor deve ser um CGColor
, não UIColor
:
view.layer.borderWidth = 5.0f;
view.layer.borderColor = [[UIColor grayColor] CGColor];
Para programação rápida, use isso
tv_comment.layer.borderWidth = 2
tv_comment.layer.borderColor = UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 1).CGColor
Isso é o mais próximo possível de um Uitextfield original
func updateBodyTextViewUI() {
let borderColor = UIColor.init(red: 212/255, green: 212/255, blue: 212/255, alpha: 0.5)
self.bodyTextView.layer.borderColor = borderColor.CGColor
self.bodyTextView.layer.borderWidth = 0.8
self.bodyTextView.layer.cornerRadius = 5
}
Acredito que as respostas acima são para as versões anteriores do Swift. Pesquisei um pouco e o código abaixo funciona para o Swift 4. Apenas compartilhando -o para quem quer que possa se beneficiar.
self.textViewName.layer.borderColor = UIColor.lightGray.cgColor
self.textViewName.layer.borderWidth = 1.0;
self.textViewName.layer.cornerRadius = 8;
Codificação feliz!
A partir do iOS 8 e Xcode 6, agora acho que a melhor solução é subclasse UITextView e marcar a subclasse como um IB_Designable, o que permitirá que você visualize a borda no storyboard.
Cabeçalho:
#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface BorderTextView : UITextView
@end
Implementação:
#import "BorderTextView.h"
@implementation BorderTextView
- (void)drawRect:(CGRect)rect
{
self.layer.borderWidth = 1.0;
self.layer.borderColor = [UIColor blackColor].CGColor;
self.layer.cornerRadius = 5.0f;
}
@end
Em seguida, basta arrastar seu uitextview no storyboard e definir sua classe como bordertextview
O que fez funcionar (além de seguir as respostas aqui) é adicionar o borderStyle
atributo:
#import <QuartzCore/QuartzCore.h>
..
phoneTextField.layer.borderWidth = 1.0f;
phoneTextField.layer.borderColor = [[UIColor blueColor] CGColor];
phoneTextField.borderStyle = UITextBorderStyleNone;
Apenas uma pequena adição. Se você tornar a borda um pouco mais larga, ela interferirá no lado esquerdo e direito do texto. Para evitar isso, adicionei a seguinte linha:
self.someTextView.textContainerInset = UIEdgeInsetsMake(8.0, 8.0, 8.0, 8.0);
No Swift 3, você pode usar as duas linhas a seguir:
myText.layer.borderColor = UIColor.lightGray.cgColor
myText.layer.borderWidth = 1.0
Eu resolvi esse problema no storyboard colocando um totalmente desativado UIButton
atrás do UITextView
e fazer a cor de fundo do UITextView
ClearColor. Isso funciona sem exigir código ou pacotes extras.