Kenarlıklı UITextView


127

A çevresinde ince gri bir kenarlık olmasını istiyorum UITextView. Apple belgelerini inceledim ancak orada herhangi bir mülk bulamadım. Lütfen yardım et.

Yanıtlar:


306
#import <QuartzCore/QuartzCore.h>

....

// typically inside of the -(void) viewDidLoad method
self.yourUITextView.layer.borderWidth = 5.0f;
self.yourUITextView.layer.borderColor = [[UIColor grayColor] CGColor];

62
Bunun gerçekten çok fazla açıklamaya ihtiyacı olduğunu düşünmemiştim, view UITextView'dur ve kod, görünümü kurduğunuz her yere gider (awakeFromNib veya viewDidLoad iki olası yerdir). Verilen bir kod olmadığından, yanıt olarak iyi bir bağlam vermenin bir yolu yoktur.
Kendall Helmstetter Gelner

XCode katman için kenarlık belirlememe izin vermiyor. Katmanın salt okunur olduğunu söylüyor. UIView yaptım (bazı unsurları nereye koydum) ve bu görünüme sınır koymaya çalıştım. Bunu yapmaya çalışıyorum self.myView.layer.borderWidth ..., ama dediğim gibi, katman salt okunurdur, bu nedenle katmanın ayarlanacak herhangi bir yöntemi veya değişkeni yoktur
Paulius Vindzigelskis

2
QuartzCore'u ithal ettiniz mi? Ayrıca self.myView'dan bir CALayer almayı ve bunun üzerine borderWidth ayarlamayı deneyebilirsiniz. Ayarlanabilir.
Kendall Helmstetter Gelner


42

Yuvarlatılmış köşeler için aşağıdakileri ekleyin:

self.yourUITextview.layer.cornerRadius = 8; 

23

TextView"TbComments" adlı denetimimin etrafına kenarlık eklemek için kullandığım kod :

self.tbComments.layer.borderColor = [[UIColor grayColor] CGColor];
self.tbComments.layer.borderWidth = 1.0;
self.tbComments.layer.cornerRadius = 8;

Ve işte göründüğü gibi:

görüntü açıklamasını buraya girin

Tereyağından kıl çeker gibi.


19

Ben eklemek UIImageViewbir subview UITextView. Bu UITextField, yukarıdan aşağıya degrade dahil olmak üzere a üzerindeki yerel sınırla eşleşir :

görüntü açıklamasını buraya girin

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

Bunlar kullandığım png resimleri ve bir jpg temsili:

@ 1x

@2 kere

görüntü açıklamasını buraya girin


Güzel çözüm. Bu resimler senin mi? Onları kullanmakta özgür müyüz?
James Webster

Bu görüntüler, Apple'ın kendi uygulamalarında kullanılanlar üzerinde 'modellenmiştir'. Gerçekte onları çıkardım ve varsa çok az değişiklik yaptım. Kendi sorumluluğunuzdadır kullanın. Amaç, doğal görünümü ve hissi taklit etmekti, bu yüzden çok farklı görünen bir şey bulmak zor. Değeri ne olursa olsun, bu görseli sorunsuz kullanan uygulamaları gönderdim ve onayladım.
Ben Packard

Png resim dosyaları kaldırılmış gibi görünüyor - Bunu sürekli olarak yeni bir resim konumu ile güncellemeyi düşünmüyorum, bu nedenle jpg sizin için çalışmazsa özür dilerim. Yorum yoluyla istendiğinde yeniden yükleyebilirim.
Ben Packard

3
codeEklenen görüntü ile bu en iyi şekilde çalışır: resizableImageWithCapInsets: UIEdgeInsetsMake (28, 14, 28, 14)
RefuX

WikiUpload bağlantıları (iki resim için) artık resim dosyalarını bulamıyor. ;-(
Mike Gledhill

18

Harika çalışıyor, ancak renk şu şekilde CGColorolmamalı UIColor:

view.layer.borderWidth = 5.0f;
view.layer.borderColor = [[UIColor grayColor] CGColor];

4
#import <QuartzCore / QuartzCore.h>
kolinko

6

Yukarıdaki cevapların Swift'in önceki sürümleri için olduğuna inanıyorum. Biraz Google'da araştırdım ve aşağıdaki kod Swift 4 için çalışıyor. Sadece onu kim yararına olursa olsun paylaşın.

self.textViewName.layer.borderColor = UIColor.lightGray.cgColor
self.textViewName.layer.borderWidth = 1.0
self.textViewName.layer.cornerRadius = 8

Mutlu Kodlama!


Swift5 ve karanlık mod ile sistem renklerini bile kullanabilirsiniz:self.textViewName.layer.borderColor = UIColor.systemGray4.cgColor
çok sayıda

4

Swift Programlama için bunu kullanın

tv_comment.layer.borderWidth = 2
tv_comment.layer.borderColor = UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 1).CGColor

Ya da sadeceUIColor(white: 0.2, alpha: 1).CGColor
Leo

3

bu, orijinal bir UITextField'den olabildiğince yakın

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
}

1

Storyboard - Identity Inspector - User Defined Runtime Attribute'tan UITextView'a kenarlık ekleyebilirsiniz

görüntü açıklamasını buraya girin


0

İOS 8 ve Xcode 6'dan itibaren, şimdi en iyi çözümün UITextView alt sınıfına girmek ve alt sınıfı bir IB_DESIGNABLE olarak işaretlemek olduğunu buluyorum, bu da kenarlığı film şeridinde görüntülemenizi sağlayacak.

Başlık:

#import <UIKit/UIKit.h>

IB_DESIGNABLE

@interface BorderTextView : UITextView

@end

Uygulama:

#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

Ardından, UITextView'unuzu storyboard'da sürükleyin ve sınıfını BorderTextView olarak ayarlayın.


0

Çalışmasını sağlayan şey (buradaki cevapları takip etmenin yanı sıra) borderStyleözniteliği eklemektir :

#import <QuartzCore/QuartzCore.h>
..

phoneTextField.layer.borderWidth = 1.0f;
phoneTextField.layer.borderColor = [[UIColor blueColor] CGColor];
phoneTextField.borderStyle = UITextBorderStyleNone;

0

Sadece küçük bir ekleme. Kenarlığı biraz daha geniş yaparsanız, metnin sol ve sağ tarafına müdahale eder. Bundan kaçınmak için şu satırı ekledim:

self.someTextView.textContainerInset = UIEdgeInsetsMake(8.0, 8.0, 8.0, 8.0);

0

Swift 3'te aşağıdaki iki satırı kullanabilirsiniz:

myText.layer.borderColor = UIColor.lightGray.cgColor

myText.layer.borderWidth = 1.0

-3

Bu sorunu film şeridinde tamamen devre dışı UIButtonbırakarak UITextViewve UITextViewclearColor'un arka plan rengini yaparak çözdüm. Bu, ekstra kod veya paket gerektirmeden çalışır.


3
Elbette, düğmelerin kenarları olmadığı için bu iOS 7'de çalışmıyor (düğmeler artık etiketlere benziyor)
Mike Gledhill
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.